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

裁剪UIImage时如何修改超出图像区域的背景颜色?

修改UIImage裁剪时的背景色

嘿,当然可以修改这个背景色啦!你的当前代码里没有主动填充超出图像范围的区域,所以默认会显示白色(或者透明,取决于上下文的不透明设置)。我们只需要在绘制原图像之前,先给画布填充你想要的颜色就行,步骤超简单:

  1. 在获取绘图上下文后,先设置你需要的背景色
  2. 用这个颜色填充整个裁剪矩形的区域
  3. 再绘制原图像,这样图像部分会覆盖在背景色上,超出的区域就保留你设置的颜色了

下面是修改后的完整代码,我加了注释标注关键改动:

func crop(mainImage: UIImage, rectangle: CGRect, backgroundColor: UIColor = .white) -> UIImage? {
    let rectSize = CGSize(width: floor(rectangle.width), height: floor(rectangle.height))
    UIGraphicsBeginImageContextWithOptions(rectSize, false, mainImage.scale)
    
    guard let context = UIGraphicsGetCurrentContext() else {
        UIGraphicsEndImageContext()
        return nil
    }
    
    // 关键步骤1:设置你想要的背景色
    context.setFillColor(backgroundColor.cgColor)
    // 关键步骤2:填充整个裁剪区域
    context.fill(CGRect(origin: .zero, size: rectSize))
    
    // 绘制原图像
    mainImage.draw(at: CGPoint(x: -rectangle.origin.x, y: -rectangle.origin.y))
    
    let croppedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    return croppedImage
}

额外说明:

  • 我给函数加了一个backgroundColor参数,默认还是白色,这样你可以在调用的时候灵活传入任意颜色,比如crop(mainImage: myImage, rectangle: myRect, backgroundColor: .red)
  • 如果想要透明背景,只需要传入.clear,同时确保UIGraphicsBeginImageContextWithOptions的第二个参数是false(也就是不开启不透明模式)

内容的提问来源于stack exchange,提问作者Srinija

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:37:59