我正在使用以下方式裁剪图像:
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白边。右下角放大以查看各个像素看起来像这样。显然,边界不是纯白色,而是可能来自后期压缩的白色阴影。
这个白边神器来自哪里?
答案 0 :(得分:4)
问题是croppingRect
的值不是全像素。
作为x
,y
,width
,height
的值,其中计算的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含义),因为裁剪矩形(通常)不应大于图像矩形。