2016-07-27 29 views
2

画像にアップロード制限が2 MBあります。ユーザーが2MB以上の画像をアップロードしようとすると、解像度を下げることなくサイズを縮小したいと考えています。解像度を下げずに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

なぜループを使用しましたか? if() –

+0

whileループはif条件とは異なり、0.75の画質で再帰的に画像を作成します。 – akdsouza

答えて

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

これは正しいアプローチです。 0.1 to 1とは異なる縮尺を設定して、画像の品質とサイズをどれくらい減らすかを設定できます。 @Lionは、あなたが快適なファイルサイズを達成するために高品質で遊んでする必要がありますが、言ったように

print(UIImageJPEGRepresentation(image, 1)!.length)この行は再び最大(because scale = 1)

+0

このアップデートでは何も新たに追加されません。これは私の答えに記載したものと同じです。 – akdsouza

-1

に、画像の品質やサイズや解像度を上げます。しかし、私はそれに気付いた:

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

画像の長さを最大限に印刷します。 while条件の中では、ファイルサイズを小さくしているので、これは誤解を招きます。

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

関連する問題