画像ファイルのフィンガープリントを計算して、同じ画像のサイズ変更されたコピー (および異なる形式のコピー) を検出する簡単なスクリプトに取り組んでいます。imagecolorat()
画像の色の値にアクセスするには、次のように画像のすべてのピクセルを読み取る必要があることを除いて、すべてがうまく機能します。
function image_chksum (&$src_image, $x1, $y1, $x2, $y2) {
$chksum = 0;
for ($x = $x1; $x < $x2; $x++)
for ($y = $y1; $y < $y2; $y++) {
$rgb = imagecolorsforindex ($src_image, imagecolorat($src_image, $x, $y));
$sum = ($rgb["red"] + $rgb["green"] + $rgb["blue"] + $rgb["alpha"]);
$chksum += $sum;
}
return $chksum;
}
(それが何をするかに注意を払わないでください。これはアルゴリズム全体ではなく、単なる例です)
そう。この醜いコードを見ると、質問が出てきます.gd画像リソース($src_image
私の場合)にアクセスして、それを配列などとして使用できますか? このメソッドが PIL/PILLOW を使用して Python で動作するのを見てきました。
この問題は、アルファ png 画像をチェックするときにも発生します。残念ながら、ここで説明されている方法: How to check a PNG for grayscale/alpha color type? トゥルーカラー以外の画像では機能しないため、すべてのピクセルをチェックするようにフォールバックする必要があります (再び)。透明度は通常、単一のピクセルではなく領域で使用されるため、最初のアイデアは N 番目のピクセルごとにチェックすることですが、それは非常にクールではありません。