2017-04-06 65 views
2

我試圖儘可能減少圖像的文件大小,然後再上傳它們。現在我這樣做:swift ios在上傳之前縮小圖像大小

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

這將採取任何圖像從相機或相冊的到來,讓JPG和減小其尺寸。

我已經設置設定爲0.1,但是當我上傳我的圖片大小最終仍圍繞300-350kb,有沒有什麼辦法,我可以更調整它們的大小,我瞄向50-70kb

回答

4

你可以先使用這些擴展由%甚至寬度

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!) 
+5

這看起來像http://stackoverflow.com/a/38633826/1187415的副本。如果您認爲在此之前已經提出並回答了問題,則可以將其標記爲重複。沒有必要重複現有的答案。 –

1

你只能改變圖像的大小(尺寸=較少的數據),並通過使用圖像壓縮算法,如JPEG壓縮,沒有其他方式(更好的algorythm =相同質量的尺寸更小)。

聽說谷歌提高利用神經網絡最近JPEG算法(谷歌的TensorFlow)