Проблема при попытке изменить размер Uiimage - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть Uiimage (обычно с прозрачностью), и мне нужно сделать его 512x512 и максимум 100kb.Мне удалось изменить размер до 512x512 (но изображения были около 400 КБ), однако, и когда я использую метод jpegData (compressQuality: 0.3), я теряю прозрачность изображения.

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

Есть ли способуменьшить размер изображения без потери прозрачности?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

(у меня была эта проблема раньше при создании WhatsApp Sticker Packs)

Если это возможно, вы можете попробовать формат Google WebP .Это формат файла, позволяющий минимизировать размер изображения и не потерять прозрачность.Вы можете попробовать официальную библиотеку libwebp для сжатия и кодирования вашего изображения, но я рекомендую вам использовать YYImage .После установки YYImage , используйте YYCGImageCreateEncodedWebPData(), чтобы создать и сжать ваш CGImage (UIImage.cgImage?) к данным WebP (точнее, Unmanged<CFData>).

Надеюсь, эта помощь.

0 голосов
/ 29 декабря 2018

Вы можете попробовать это:

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