swift ios在上传之前减小图像大小

时间:2017-04-06 13:01:30

标签: ios swift

我尝试在上传之前尽可能减少图像的文件大小。现在我这样做:

if let firstImageData = UIImageJPEGRepresentation(pickedImage, 0.1) {  
                                        self.imgArray.append(firstImageData)
}

这将拍摄来自相机或相册的任何图像,使其成为jpg并缩小其尺寸。

我已将设置设置为 0.1 但是当我上传图片时,尺寸仍然大约为300-350kb,有没有办法我可以调整它们的大小,我的目标是50- 70KB

2 个答案:

答案 0 :(得分:20)

您可以先使用这些扩展程序将图片调整为较小尺寸,方法是调整百分比或宽度

extension UIImage {
    func resizeWithPercent(percentage: CGFloat) -> UIImage? {
        let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: size.width * percentage, height: size.height * percentage)))
        imageView.contentMode = .ScaleAspectFit
        imageView.image = self
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        imageView.layer.renderInContext(context)
        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
        UIGraphicsEndImageContext()
        return result
    }
    func resizeWithWidth(width: CGFloat) -> UIImage? {
        let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))))
        imageView.contentMode = .ScaleAspectFit
        imageView.image = self
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        imageView.layer.renderInContext(context)
        guard let result = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
        UIGraphicsEndImageContext()
        return result
    }
}

使用它就像这样称呼它

myImage = myImage.resizeWithWidth(700)!

现在接下来你仍然可以使用你选择的压缩比来压缩它

let compressData = UIImageJPEGRepresentation(myImage, 0.5) //max value is 1.0 and minimum is 0.0
let compressedImage = UIImage(data: compressData!)

答案 1 :(得分:2)

你只能改变图像的大小(更小的尺寸=更少的数据)并使用像JPEG这样的图像压缩算法来压缩它,没有其他方法(更好的algorythm =相同质量的更小尺寸)。

我最近听说google使用神经网络改进了JPEG算法(谷歌的TensorFlow)