PHP で画像比較 S3対応

↑これらの続き。

少し改善と不具合修正と S3 対応をしました。

改善 (bitmap_comp.php)

以前は、色距離の二乗(Σ{diff^2})の値を出してましたが、平方根をとって距離の値をずばり表示するようにしました。大小しか見ないので二乗のままで良いと思ってましたが、スケールが実感と合わないので。ただ、少し重たくなったと思います。

不具合対応 (bitmap_diff.php)

差分が全くない場合に警告が大量に出るのを修正しました。差分を目立たせるように正規化しますが、差分がないと 0 で割る事になってしまいまして。その場合は単純に真っ黒に塗る事にしました。

S3 対応

s://bucket/path の形式でファイル名を渡す事で S3 のファイルを指摘出来ます。(詳細は前日のエントリを参考)

先日 S3_GetFile.php を作ってたので、これだけで S3 対応出来ます。

    if (strncmp($file, 's3://', 5) === 0) {
        require_once('S3_GetFile.php');
        $data = S3_GetFile($file);
    } else {
        $data = file_get_contents($file);

無条件で require しても良いんだけど、S3 使わない事の方が多いのに読み込むの勿体ないので、一応必要な時だけという事で。

コマンドの実行例
  • ローカルで比較
$  php bitmap_comp.php favicon.png favicon.gif
28.830419214701
  • S3 のファイルを比較
$ php bitmap_comp.php s3://yoya/test/favicon.png  s3://yoya/test/favicon.gif
28.830419214701
  • S3 のファイルの差分画像作成
$ php bitmap_diff.php s3://yoya/test/favicon.png s3://yoya/test/favicon.gif diff.png