使用UIGraphicsContext裁剪图像时为什么会出现白边?

时间:2017-07-27 11:11:22

标签: ios swift uigraphicscontext

我正在使用以下方式裁剪图像:

UIGraphicsBeginImageContext(croppingRect.size)
let context = UIGraphicsGetCurrentContext()

context?.clip(to: CGRect(x: 0, y: 0, width: rect.width, height: rect.height))        
image.draw(at: CGPoint(x: -rect.origin.x, y: -rect.origin.y))

let croppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

裁剪后的图像有时在右下边框上有1px白边。右下角放大以查看各个像素看起来像这样。显然,边界不是纯白色,而是可能来自后期压缩的白色阴影。

enter image description here

这个白边神器来自哪里?

1 个答案:

答案 0 :(得分:4)

问题是croppingRect的值不是全像素。

作为xywidthheight的值,其中计算的CGFloat数字的结果有时会是小数(例如{{1}而不是1.3)。解决方案是围绕这些值:

1.0

舍入必须为let cropRect = CGRect( x: x.rounded(.towardZero), y: y.rounded(.towardZero), width: width.rounded(.towardZero), height: height.rounded(.towardZero)) (请参阅here含义),因为裁剪矩形(通常)不应大于图像矩形。