调整带透明通道的UIImage尺寸时如何避免透明区域变黑
解决UIImage调整尺寸后透明通道丢失的问题
你的问题根源就在UIGraphicsBeginImageContextWithOptions方法的第二个参数上——你传了true,这个参数控制是否创建不透明的图形上下文,所以原本的透明区域会被默认填充成黑色。
只要把这个参数改成false,就能完美保留图片的透明通道,其他逻辑不需要做任何改动。
修正后的完整代码如下:
extension UIImage { func resizeImageWith(newSize: CGSize) -> UIImage { let horizontalRatio = newSize.width / size.width let verticalRatio = newSize.height / size.height let ratio = max(horizontalRatio, verticalRatio) let newSize = CGSize(width: size.width * ratio, height: size.height * ratio) // 第二个参数改为false,启用支持透明的上下文 UIGraphicsBeginImageContextWithOptions(newSize, false, 0) draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize)) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! } }
顺便补充下这个方法三个参数的作用:
- 第一个
newSize:指定生成的新图片尺寸 - 第二个
opaque:设为false时上下文会包含alpha通道,支持透明效果;设为true则会忽略透明层,适合纯不透明图片 - 第三个
scale:传入0会自动匹配当前设备的屏幕缩放因子,保证新图片在不同分辨率设备上显示清晰
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

