如何在图片中心添加300×100黑色矩形并获取新图路径
解决方案:为图片添加中心黑色矩形并保存到原文件夹
嘿,我注意到你贴的代码是做灰度图像转换的,和你想要实现的「在图片中心添加300×100黑色矩形,并保存到原图片所在文件夹」的需求完全不搭边~别担心,我来给你一套完整的实现方案:
实现思路
- 从原图片路径读取图片,同时生成新的保存路径(和原文件同目录,添加后缀区分)
- 使用Core Graphics绘制新图片:先绘制原图片,再在中心位置绘制指定尺寸的黑色矩形
- 将绘制好的图片保存到新路径,并返回该路径
完整代码实现
- (NSString *)addCenterBlackRectToImageAtPath:(NSString *)originalImagePath { // 1. 读取原图片 UIImage *originalImage = [UIImage imageWithContentsOfFile:originalImagePath]; if (!originalImage) { NSLog(@"无法读取原图片,请检查路径是否正确"); return nil; } // 2. 生成新图片的保存路径(和原文件同目录,后缀加_with_rect) NSString *directory = [originalImagePath stringByDeletingLastPathComponent]; NSString *originalFileName = [originalImagePath lastPathComponent]; NSString *fileNameWithoutExt = [originalFileName stringByDeletingPathExtension]; NSString *newFileName = [NSString stringWithFormat:@"%@_with_rect.png", fileNameWithoutExt]; NSString *newImagePath = [directory stringByAppendingPathComponent:newFileName]; // 3. 绘制带黑色矩形的新图片 // 获取图片尺寸 CGSize imageSize = originalImage.size; // 计算中心矩形的位置:(图片宽-矩形宽)/2,(图片高-矩形高)/2 CGRect rectFrame = CGRectMake((imageSize.width - 300)/2, (imageSize.height - 100)/2, 300, 100); // 开启绘图上下文 UIGraphicsBeginImageContextWithOptions(imageSize, NO, originalImage.scale); // 绘制原图片 [originalImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)]; // 设置黑色填充色 [[UIColor blackColor] setFill]; // 绘制矩形 UIRectFill(rectFrame); // 获取绘制好的新图片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); // 关闭上下文 UIGraphicsEndImageContext(); // 4. 将新图片保存到指定路径(PNG格式) NSData *imageData = UIImagePNGRepresentation(newImage); BOOL saveSuccess = [imageData writeToFile:newImagePath atomically:YES]; if (!saveSuccess) { NSLog(@"保存图片失败,请检查目录权限"); return nil; } // 返回新图片的路径 return newImagePath; }
使用示例
// 假设你原图片的路径是这个 NSString *originalPath = @"/Users/xxx/Documents/test.png"; NSString *newPath = [self addCenterBlackRectToImageAtPath:originalPath]; if (newPath) { NSLog(@"新图片已生成,路径:%@", newPath); // 可以在这里加载新图片到imageView UIImage *newImage = [UIImage imageWithContentsOfFile:newPath]; self.imageView.image = newImage; }
注意事项
- 确保你的App有对应目录的读写权限(比如沙盒内的目录默认有权限,要是外部目录需要申请权限)
- 如果原图片是Retina图,
UIGraphicsBeginImageContextWithOptions的第三个参数传originalImage.scale可以保证新图片的清晰度 - 代码基于ARC环境编写,不需要手动释放Core Graphics对象(上下文会自动管理)
内容的提问来源于stack exchange,提问作者Vladimír
相关产品推荐
相关产品推荐

