裁剪UIImage时如何修改超出图像区域的背景颜色?
修改UIImage裁剪时的背景色
嘿,当然可以修改这个背景色啦!你的当前代码里没有主动填充超出图像范围的区域,所以默认会显示白色(或者透明,取决于上下文的不透明设置)。我们只需要在绘制原图像之前,先给画布填充你想要的颜色就行,步骤超简单:
- 在获取绘图上下文后,先设置你需要的背景色
- 用这个颜色填充整个裁剪矩形的区域
- 再绘制原图像,这样图像部分会覆盖在背景色上,超出的区域就保留你设置的颜色了
下面是修改后的完整代码,我加了注释标注关键改动:
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
相关产品推荐
相关产品推荐

