iOS Swift 图像量化以减少 PNG 图像中的颜色数量

5

我希望将图片的颜色数量减少,即将24位PNG文件转换为更小的8位索引色图像。

我想在iOS设备上从画廊中选择创建WhatsApp表情包,因为它允许512 X 512像素大小和小于100k文件大小。

我已经尝试了这段代码。

func resizeImageWith(image: UIImage, newSize: CGSize) -> UIImage {

    let horizontalRatio = newSize.width / image.size.width
    let verticalRatio = newSize.height / image.size.height

    let ratio = max(horizontalRatio, verticalRatio)
    let newSize = CGSize(width: image.size.width * ratio, height: image.size.height * ratio)
    var newImage: UIImage
    let renderFormat = UIGraphicsImageRendererFormat.default()
        renderFormat.opaque = false
    if #available(iOS 12.0, *) {
        renderFormat.preferredRange = .standard
    } else {
        // Fallback on earlier versions
    }

        renderFormat.scale = 0.5
        let renderer = UIGraphicsImageRenderer(size: CGSize(width: newSize.width, height: newSize.height), format: renderFormat)
        newImage = renderer.image {
            (context) in

            image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        }


    return newImage
}

我希望能够进行图像量化,将PNG图像中的颜色数量减少而不失去透明背景,以便将543KB的图像压缩至108KB以下,但无法进一步压缩。

谢谢

1个回答

3
你可以从这里获取帮助,https://github.com/kosua20/TheQuantizer。其中有一个名为rgbaRepresentation()的函数,它可以将任何图像转换为较小的8位索引颜色图像数据。还有另一个项目https://github.com/iChochy/libminipng,它也将图像量化为较低的位数。与我发现的其他项目相比,这两个项目在Swift中运行起来相对容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接