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

Issue when trying resize a Uiimage

我有一个Uiimage(通常是透明的),我需要把它做成512x512,最大100kb。 我能够将大小调整为 512x512(但图像大约为 400kb),但是当我使用 jpegData(压缩质量:0.3)方法时,我失去了图像的透明度。

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

有没有什么方法可以在不损失透明度的情况下缩小图片的大小?

你可以试试这个:

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

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

如果可能的话,你可以试试Google的WebP format. It is a file format to minimize the image size and not to lose the transparency. You can try the libwebp official library to compress and encode your image, but I recommend you to use YYImage. After installing YYImage,使用YYCGImageCreateEncodedWebPData()创建你的CGImage(UIImage.cgImage?)并将其压缩成WebP数据(更多准确地说,Unmanged<CFData>).

希望对您有所帮助。