我有一个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: [""])
有什么方法可以减小图像尺寸而又不损失透明度吗?
答案 0 :(得分:1)
(在创建WhatsApp Sticker Pack之前,我有这个问题)
如果可能,您可以尝试使用Google的WebP格式。它是一种文件格式,可以最大程度地减小图像大小并且不丢失透明度。您可以尝试使用libwebp官方库来压缩和编码图像,但是我建议您使用YYImage。 installing 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)
}
}