Takahiro Octopress Blog

-1から始める情弱プログラミング

jpegDataメソッドによるJPEG画像圧縮テスト

はじめに

最近は、iPhone端末も昔に比べて飛躍的にカメラの性能も向上し、
高品質な写真を撮ることができます。
一消費者としては喜ばしい限りなのですが、エンジニアとしては喜んでばかりもいられません。

というのも、画像をクラウド上で保存する機能があった場合に、
容量と品質を天秤にかけざるを得ないことも、まだまだあるからです。

そこで今回は、画像をJPEG圧縮することで、どの程度の品質で容量が変わるのか実験してみたいと思います。
利用するメソッドは下記になります。

1
func jpegData(compressionQuality: CGFloat) -> Data?

実験

早速、実験方法ですが、
jpegData の引数である compressionQuality に0.1刻みで0.0〜1.0の間を指定して、
結果容量を比較してみました。

実験①:イラスト画像

まずは、区切り線の明瞭なイラスト画像を用いて実験をしてみました。

実験結果①

1.0から0.9が極端に下がっていることがわかります。
また、0.1と0.0とでは画像容量に差分がない結果となりました。

実際に、画像を比較してみると、

compressionQuality: 1.0 の画像
compressionQualityに1.0を指定したイラスト画像

compressionQuality: 0.5 の画像
compressionQualityに0.5を指定したイラスト画像

compressionQuality: 0.0 の画像
compressionQualityに0.0を指定したイラスト画像

のようになります。
当然ですが、1.0の方が全体的に滑らかで、0.0はかなり品質が落ちていることがわかります。

※画像はイラストレインからお借りしました。

実験②:写真

続いて写真で実験してみました。

実験結果②

イラストと同じく、1.0から0.9が極端に容量が下がっている一方で、
0.1から0.0は同じ容量となりました。

こちらも画像を比較してみると、

compressionQuality: 1.0 の画像
compressionQualityに1.0を指定したイラスト画像

compressionQuality: 0.5 の画像
compressionQualityに0.5を指定したイラスト画像

compressionQuality: 0.0 の画像
compressionQualityに0.0を指定したイラスト画像

のようになります。 やはり0.0にまでなると品質劣化が肉眼でもわかりますね。

※画像は、ぱくたそからお借りしました。

因みに

JPEG圧縮のアルゴリズムは当然ながら、Swiftのメソッドを利用したからといって変わるわけではありません。
なので、Mac上で画像を書き出す際に品質を指定することで確認できます笑

Mac上で画像をJPEG圧縮

JPEGのアルゴリズムに関しては、

などが参考になるかと思います。

まとめ

以上の実験からわかる通り、圧縮具合を変えることで容量に大きな変化が生まれますし、
当然ですが、それに伴い品質も劣化していきます。

サービス上で許容となる品質レベルは異なるでしょうし、慎重な意思決定が必要となることでしょう。
個人的には 0.5 でも全然気にならなかったりしますが、許容範囲広すぎでしょうか。。。笑

と言ったところで本日はここまで。

Comments