如何快速减小 png 图像的大小[关闭]

问题描述 投票:0回答:0

这里有很多示例代码通过将 UIImage 转换为 JPEG 来压缩 UIImage

像这样

如何调整 UIImage 的大小以减小上传图片的大小

extension UIImage {
    func resized(withPercentage percentage: CGFloat, isOpaque: Bool = true) -> UIImage? {
        let canvas = CGSize(width: size.width * percentage, height: size.height * percentage)
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: canvas, format: format).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
    func resized(toWidth width: CGFloat, isOpaque: Bool = true) -> UIImage? {
        let canvas = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: canvas, format: format).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
}

例如这段代码,我试过将 isOpaque 设置为 true 和 false,在这两种情况下都不保留透明度。

这里的另一个例子Resize UIImage to 200x200pt/px

extension UIImage {
    func scaleImage(toSize newSize: CGSize) -> UIImage? {
        var newImage: UIImage?
        let newRect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height).integral
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
        if let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage {
            context.interpolationQuality = .high
            let flipVertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: newSize.height)
            context.concatenate(flipVertical)
            context.draw(cgImage, in: newRect)
            if let img = context.makeImage() {
                newImage = UIImage(cgImage: img)
            }
            UIGraphicsEndImageContext()
        }
        return newImage
    }
}

该功能将图像调整为特定分辨率不是大小。

我拥有的是 png 图像,其中我保留了透明度,同时将文件大小保持在 500k 以下(硬限制 - 因为服务器限制它)

我怎样才能快速做到这一点?

swift swiftui uiimage core-graphics
© www.soinside.com 2019 - 2024. All rights reserved.