swift ios在上传之前缩小图像大小
我在上传之前尽可能地减少图像的文件大小。 现在我这样做:
if let firstImageData = UIImageJPEGRepresentation(pickedImage, 0.1) { self.imgArray.append(firstImageData) }
这将拍摄来自相机或相册的任何图像,使其成为jpg并减小其尺寸。
我已将设置设置为0.1,但是当我上传图像时,大小仍然大约为300-350kb,有没有什么方法可以调整它们的大小,我的目标是50-70kb
您可以使用这些扩展名将图像调整为较小尺寸,方法是按百分比或宽度调整图像大小
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!)
您只能通过使用像JPEG这样的图像压缩算法来更改图像的大小(更小的尺寸=更少的数据)并进行压缩,没有其他方法(更好的algorythm =相同质量的更小尺寸)。
我最近听说google使用神经网络改进了JPEG算法(谷歌的TensorFlow)