2016-07-27 109 views
2

我的圖片上傳限制爲2 MB。因此,如果用戶嘗試上傳大於2 MB的圖像,我想在不降低分辨率的情況下減小尺寸。如何在不降低分辨率的情況下降低UIImage的質量?

我該如何做到這一點?我想是這樣的,但它沒有工作:

 var fileSize = UIImageJPEGRepresentation(image, 1)!.length 
     print("before File size:") 
     print(fileSize) 

     while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{ 

      let mydata = UIImageJPEGRepresentation(image, 0.75) 
      fileSize = mydata!.length 
      image = UIImage(data: mydata!)! 

      print("make smaller \(fileSize)") 
     } 

     print("after File size:") 
     print(UIImageJPEGRepresentation(image, 1)!.length) 

輸出:

before File size: 
2298429 
make smaller 846683 
after File size: 
2737491 
+0

爲什麼使用while循環?你可以使用if() –

+0

while循環將以0.75的質量遞歸地創建一個圖像,而不像if條件 – akdsouza

回答

-1
let mydata = UIImageJPEGRepresentation(image, 0.75) 
     fileSize = mydata!.length 
     image = UIImage(data: mydata!)! 

這是正確的做法。您可以從0.1 to 1中設置不同的比例,以減少圖像的質量和大小。

print(UIImageJPEGRepresentation(image, 1)!.length)此行再次提高圖像的質量和大小或分辨率爲最大(because scale = 1)

+0

這個更新並沒有增加任何新內容,這與我在我的回答中所陳述的相同。 – akdsouza

-1

正如@Lion說,你將不得不玩的質量達到一個愉快的文件大小。然而,我注意到:

print(UIImageJPEGRepresentation(image, 1)!.length) 

將以最高質量打印圖像長度。這是因爲在內部條件下的誤導,你正在實現更小的文件大小。

while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{ 

      let mydata = UIImageJPEGRepresentation(image, 0.75) 
      fileSize = mydata!.length 
      image = UIImage(data: mydata!)! 

      print("make smaller \(fileSize)") 
     } 
+0

我注意到,但是當我用新的小型mydata設置圖像時,它會不會變小? –

+0

是的,它會。它是一個捕獲22,因爲你必須在某個地方達成妥協,才能滿足你的實現。你可以探索在Swift中等價的[UIImage imageWithData:scale:]方法。 – akdsouza

+0

誰投了票,會不會添加一個理由而不是隱藏呃? – akdsouza