【问题标题】:Issue when trying resize a Uiimage尝试调整 Uiimage 大小时的问题
【发布时间】:2018-12-29 16:30:53
【问题描述】:

我有一个 Uiimage(通常是透明的),我需要将其设置为 512x512,最多 100kb。 我能够将大小调整为 512x512(但图像大约为 400kb),但是当我使用 jpegData (compressionQuality: 0.3) 方法时,我失去了图像的透明度。

let imagePNG = image.jpegData(compressionQuality: 0.3)
try stickerPack.addSticker(imageData: imagePNG!, type: ImageDataExtension(rawValue: "png")!, emojis: [""])

有什么办法可以在不损失透明度的情况下缩小图片尺寸?

【问题讨论】:

    标签: swift png webp


    【解决方案1】:

    (我之前在创建 WhatsApp 贴纸包时遇到过这个问题)

    如果可能的话,你可以试试谷歌的WebP 格式。它是一种文件格式,可最大限度地减小图像大小且不丢失透明度。您可以尝试使用libwebp 官方库来压缩和编码您的图像,但我建议您使用YYImage。在installing YYImage 之后,使用YYCGImageCreateEncodedWebPData() 创建您的CGImage (UIImage.cgImage?) 并将其压缩为WebP 数据(更准确地说,Unmanged<CFData>)。

    希望对您有所帮助。

    【讨论】:

    • 我按照你说的做了,我导入了库,使用 YYCGImageCreateEncodedWebPData 方法转换了图像,但我无法在stickerPack.addSticker () 方法中添加。 “无法转换 'Unmanaged 类型的值?'到预期的参数类型“数据””。有关如何处理此问题的一些帮助?谢谢!
    • 您可以使用unmanagedData.takeUnretainedValue() as DataUnmanaged<CFData> 转换为Data
    • 成功了! 400kb 的图像大约是 150kb。我还需要再缩小一点。但是您的回答已经帮助了我!谢谢。
    【解决方案2】:

    你可以试试这个:

    extension UIImage {
        enum JPEGQuality: CGFloat {
            case lowest  = 0
            case low     = 0.25
            case medium  = 0.5
            case high    = 0.75
            case highest = 1
        }
    
        func jpeg(_ quality: JPEGQuality) -> Data? {
            return UIImageJPEGRepresentation(self, quality.rawValue)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多