调整透明图像(UIImage)的大小而不获得黑色背景

Posted

技术标签:

【中文标题】调整透明图像(UIImage)的大小而不获得黑色背景【英文标题】:Resize transparent image (UIImage) without getting black background 【发布时间】:2018-01-23 14:00:22 【问题描述】:

我尝试使用下一个解决方案调整包含透明图像的 UIImage 的大小,但它返回的图像没有透明度,而是透明区域变为黑色

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)
        UIGraphicsBeginImageContextWithOptions(newSize, true, 0)
        draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    

【问题讨论】:

UIGraphicsGetImageFromCurrentImageContext - Split image into two creates a black background的可能重复 【参考方案1】:

您将 opaque 属性设置为 true。如果您希望它是透明的,则需要将其设置为 false:

UIGraphicsBeginImageContextWithOptions(newSize, false, 0)

请注意,UIGraphicsBeginImageContextWithOptions 返回一个可选图像,因此您也应该更改返回类型,并且您可以在返回结果后使用 defer 结束上下文:

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)
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
        defer  UIGraphicsEndImageContext() 
        draw(in: CGRect(origin: .zero, size: newSize))
        return UIGraphicsGetImageFromCurrentImageContext()
    

【讨论】:

以上是关于调整透明图像(UIImage)的大小而不获得黑色背景的主要内容,如果未能解决你的问题,请参考以下文章

调整图像大小而不扭曲或裁剪它

UIImage 遮罩在 iPhone 上提供黑色背景(而不是在模拟器中)

UIImage 调整大小并裁剪以适合

如何调整 UIImage 的大小以减小上传图像的大小

将透明 PNG 保存为透明 GIF

调整uiimage中的图像大小并将其以新大小保存到相册