You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整带透明通道的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:59:43