<?php // 画像からカラーヒストグラムを計算する関数 function make_histogram($path, $debug = TRUE){ if ($debug) { echo "histogram: $path\n"; } $im_big = imagecreatefromjpeg($path); $sx_big = imagesx($im_big); $sy_big = imagesy($im_big); // 高速化するために縮小 $sx = 256; $sy = 192; $im = imagecreatetruecolor($sx, $sy); imagecopyresampled($im, $im_big, 0, 0, 0, 0, $sx, $sy, $sx_big, $sy_big); //ピクセルを数える $his = array_fill(0, 64, 0); for ($y = 0, $y < $sy; $y++){ for ($x = 0; $x < $sy; $x++){ $rgb = imagecolorat($im, $x, $y); $no = rgb2no($rgb); $his[$no]++; } } // 正規化 $pixels = $sx * $sy; for ($i = 0; $i < 64; $i++){ $his[$i] = $his[$i] / $pixels; } imagedestroy($im_big); imagedestroy($im); return $his; } // ヒストグラムを計算 function rgb2no($rgb){ $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb &0xFF; $rb = floor($r / 64); $gn = floor($g / 64); $bn = floor($b / 64); return 16 * $rn + 4 * $gn + $bn; }