使用 CoreGraphics 裁剪图片的时候如果计算后的尺寸没有像素对齐,绘制的图像就会有 1px 的透明边框。
像素对齐的算法:
例如需要计算 0.5pt
的高度在当前屏幕下需要多少 px
(像素)进行显示:
let scale = UIScreen.main.scale
let h = ceil(0.5 * scale) / scale
scale
在 iphone8 上是 2 ,在 iphone8 plus 上是 3.
Note
UIKit 的方法 UIGraphicsBeginImageContextWithOptions
会对传入的 size 进行像素对齐,不需要手动修正。
使用代码进行验证:
UIGraphicsBeginImageContextWithOptions(CGSize(width: 0.5, height: 0.5), false, 0)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
生成的 img 的 size
不是 0.5x0.5,而是进行了像素对齐的大小:
iPhone 8 :0.5 x 0.5
iPhone 8 plus :0.6666666 x 0.6666666