ios - 在 iOS 中将图像大小减小至最大 100 kb,并固定尺寸 512x512

标签 ios swift uiimageview uiimage

我正在尝试从默认相机捕获的图像创建贴纸图像。

我需要将此图像的大小调整为特定的 512x512 尺寸,最大尺寸为 100 kb。但是,我找不到任何解决方案。

我尝试将图像大小调整为 512x512。使用以下代码。

var image = imgFront?.resizeWithWidth(width: 512)

extension UIImage {

    func resizeWithWidth(width: CGFloat) -> UIImage? {
        let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: width, height: width)))
        imageView.contentMode = .scaleAspectFit
        imageView.image = self

        UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: width), false, scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        imageView.layer.render(in: context)
        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
        UIGraphicsEndImageContext()
        return result
    }
}

这使得图像正确地变为 512x512。但是,当我尝试使用以下方法将图像大小减小到 100 kb 以下时,它会改变图像的尺寸。

extension UIImage {

    func resized(withPercentage percentage: CGFloat) -> UIImage? {
        let canvasSize = CGSize(width: 512, height: 512)
        UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
        defer { UIGraphicsEndImageContext() }
        draw(in: CGRect(origin: .zero, size: canvasSize))
        return UIGraphicsGetImageFromCurrentImageContext()
    }

    func resizedTo100KB() -> UIImage? {
        guard self.pngData() != nil else { return nil }
        let megaByte = 800.0

        var resizingImage = self
        var imageSizeKB = 990.0 // ! Or devide for 1024 if you need KB but not kB

        while imageSizeKB > megaByte { // ! Or use 1024 if you need KB but not kB
            guard let resizedImage = resizingImage.resized(withPercentage: 0.1),
                let imageData = resizedImage.pngData() else { return nil }

            resizingImage = resizedImage
            imageSizeKB = Double(imageData.count) / megaByte // ! Or devide for 1024 if you need KB but not kB
        }

        return resizingImage
    }
}

任何人都可以建议我实现这一目标的好解决方案吗?

约束

  • 图片尺寸必须为 512x512
  • 图像大小必须是小于 100 的任意大小 kb。

最佳答案

您应该使用 jpg 数据而不是 png 数据来获得小字节大小的图像。

关于ios - 在 iOS 中将图像大小减小至最大 100 kb,并固定尺寸 512x512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740105/

相关文章:

ios - Swift:UIButton 触摸事件未在自定义 View 中调用

ios - 协议(protocol)委托(delegate)有时不工作

iOS 14 WidgetKit 不刷新

ios - 如何让 UIImageView 填充 UITableViewCell?

ios - 通过 ObjCMongoDB 运行基于 MongoDB 字典的命令

ios - 使用偏移时导航栏项目可点击区域切割

ios - 如何知道 UIBarButtonItem 是否被按下?

javascript - 如何检查我正在查看哪个 javascript id

iphone - 如何获取 UIImage 并给它一个黑色边框?

ios - objective-c : Resizing a UIImageView