koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

PHPでPNGのICCプロファイルを無視する

Chrome 68 はHTTPのサイトが警告表示されることが話題になっていましたが、他にもこんなことがあったようです。

var.blog.jp

どうやらこれまで無視されていた画像ファイルへ埋め込まれたICCプロファイルが反映されるようになった結果、表示が変化してしまったようです。

自分の周りでもユーザーがアップロードした画像を表示しているサイトで同じことが起きました。 やったね。

元と同じ表示を得るには、このICCプロファイルを削除してやれば良さそうです。 (これが正しい対応かにはやや疑問が残りますが)

そのサイトでPHPで画像を処理するときにはGDを使用しています。

このGDではICCプロファイルは無視されるようです。

github.com

つまり? 一度GDで何か処理してやれば無視できる。

<?php
    public static function normalize_image($baseImagePath, $outputImagePath) {
        // 一度GDで処理することでPNGのICCプロファイルを削除する
        $workimage = imagecreatefrompng($baseImagePath);
        imagesavealpha($workimage,true);
        imagepng($workimage, $outputImagePath);
        imagedestroy($workimage);

        return $outputImagePath;
    }

相当ダーティですが、これでICCプロファイルを消せました。

正しさより結果、この位でいい。


尚、この記事を書いていて、PHPのコードハイライトを有効にするには <?php が必要であることに気づきました。

一つ賢くなった。