2017-11-23 12 views
0

にリサイズない:UIImageを圧縮するが、私は以下の持っている最大サイズ

extension UIImage{ 

func compressToMaxSize(bytes: Int) -> UIImage{ 
    var data: Data = UIImageJPEGRepresentation(self, 1.0)! 
    var compressionRatio: CGFloat = CGFloat(bytes)/CGFloat(data.count) 

    while data.count > bytes && compressionRatio > 0{ 
     data = UIImageJPEGRepresentation(self, compressionRatio)! 
     compressionRatio = compressionRatio - 0.05 
    } 

    return UIImage(data: data)! 
} 
} 

圧縮サイズは、元の第十程度であるので、それはバイトパラメータよりも小さいサイズでUIImageを返しませんが、私は不審です圧縮比は約0.46であった。私はここで何が欠けていますか?

+0

whileループでは、元の画像のUIImageJPEGRepにデータを設定し、その値をサイズとして使用します。 – Latcie

答えて

0

私はここで何が欠けていますか?

何が欠けているかは、JPEGと同じです。

JPEGはロッシーです。この損失を実装するために、イメージデータを特別な方法でエンコードします。たとえば、繰り返しピクセル(同じ色)のようなものは短い略記で表記します。圧縮が大きければ大きいほど、ピクセルは互いの繰り返しであると見なされます(色の正確さは捨てられます)。

したがって、出力サイズはイメージによって異なります。それはどれくらい詳細ですか?どのくらいの色の繰り返しがありますか? 1つの単色の画像は、圧縮率に関係なく、非常に小さく圧縮できます。

+0

https://en.wikipedia.org/wiki/JPEGを参照してください。典型的な写真の圧縮率と結果のサイズの表があります。「中程度の品質の写真は、圧縮されていない画像に必要な記憶領域のわずか4.3% 。 – matt

+0

私は黄色い葉1をテストするためにシミュレータ上のストック画像を使用しています。 1.0の圧縮率では、UIImageJPEGRepを使用すると8112955バイトになります。 0.95では、3559237バイトです。これは期待された結果ですか?サイズは大幅に減少しました。 – Latcie

+0

私は "期待された"ものが何であるかを知りません。それは何をしているのかです。しかし、それは確かに私があなたに送ったウェブページと一致しています。 – matt

関連する問題