WordPressでJPEGファイルをアップロードした際に生成されるファイルの圧縮率を変更しました

Google+のカバー画像のサイズは2120×1192です(2013年8月1日現在)。たしろだいすけ([my_twitter])でございます。


WordPressでは管理画面から画像ファイルをアップロードすると、元のファイル以外にいくつかのファイルが生成されます(サムネイル用など)。このときJPEGファイルの生成は、デフォルトの圧縮率90%で行われます。

ま、圧縮率90%ならば大した問題ではないかもしれませんが、今回100%に設定を変更しましたので、その方法を紹介します。

フィルターフックで圧縮率を100%にする

functions.phpに下記コードを記述してください。

function jpeg_full_quality($quality){
	return 100;
}
add_filter('jpeg_quality', 'jpeg_full_quality');

PHP5.3以上で無名関数が使えるのであれば下記コードでもよいようです。

add_filter('jpeg_quality', function($quality){return 100;});

以上で、JPEGファイル生成時の圧縮率が100%になりました。

なお、90%から100%の変更ですので、生成されたJPEGファイルを見ただけでは、上記コードがちゃんと動作しているかわかりづらいです。その場合は、一度圧縮率を10%などにしてからJPEGファイルをアップロードし、おもいっきり画像を劣化させてください。無事画像が劣化していることを確認してから100%に戻せば、コードはちゃんと動くことになりますね。

JPEGファイル圧縮率に関するデフォルトの記述

WordPress3.5.2ではwp-includes/deprecated.phpの3264行目に以下の記述があります。

function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 )

参考サイト