You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在图片中心添加300×100黑色矩形并获取新图路径

解决方案:为图片添加中心黑色矩形并保存到原文件夹

嘿,我注意到你贴的代码是做灰度图像转换的,和你想要实现的「在图片中心添加300×100黑色矩形,并保存到原图片所在文件夹」的需求完全不搭边~别担心,我来给你一套完整的实现方案:

实现思路

  1. 从原图片路径读取图片,同时生成新的保存路径(和原文件同目录,添加后缀区分)
  2. 使用Core Graphics绘制新图片:先绘制原图片,再在中心位置绘制指定尺寸的黑色矩形
  3. 将绘制好的图片保存到新路径,并返回该路径

完整代码实现

- (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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:57:58