尝试调整Uiimage大小时出现问题

时间:2018-12-29 02:14:00

标签: swift png webp

我有一个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: [""])

有什么方法可以减小图像尺寸而又不损失透明度吗?

2 个答案:

答案 0 :(得分:1)

(在创建WhatsApp Sticker Pack之前,我有这个问题)

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

希望获得帮助。

答案 1 :(得分:0)

您可以尝试以下方法:

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)
    }
}