<?php
$imageColor = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/AutumnLeaves COLOR.jpg' );
$imageBW = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/AutumnLeaves BW.jpg' );
if (! $imageColor or ! $imageBW) {
die ( 'Cannot load image!' );
}
echo (calculateColorSpaceValue ( $imageColor ));
echo ("\r\n");
echo (calculateColorSpaceValue ( $imageBW ));
function calculateColorSpaceValue($imageHandle) {
$RGBVariance = 0;
//Перебираем все пиксели
for($x = 0; $x < imagesx ( $imageHandle ); $x ++) {
for($y = 0; $y < imagesy ( $imageHandle ); $y ++) {
//Получаем цвет очередного пикселя
$color = imagecolorat ( $imageHandle, $x, $y );
//Разбираем его на RGB
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
//Рассчитываем сумму разниц между R, G и B значениями
$RGBVariance += (abs ( $r - $g ) + abs ( $r - $b ) + abs ( $r - $b ));
}
}
//Возвращаем коэффициент вариации
return ($RGBVariance / (imagesx ( $imageHandle ) * imagesx ( $imageHandle )));
}
?>
<?php
$imageAutomnColor = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/AutumnLeaves COLOR.jpg' );
$imageAutomnBW = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/AutumnLeaves BW.jpg' );
$imageAutomnSepia = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/AutumnLeaves Sepia.jpg' );
$imageDesertColor = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/Desert Landscape COLOR.jpg' );
$imageDesertBW = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/Desert Landscape BW.jpg' );
$imageDesertSepia = imagecreatefromjpeg ( dirname ( __FILE__ ) . '/Desert Landscape Sepia.jpg' );
if (! $imageAutomnColor or ! $imageAutomnBW or ! $imageAutomnSepia or !
$imageDesertColor or ! $imageDesertBW or ! $imageDesertSepia) {
die ( 'Cannot load image!' );
}
echo ('Automn colored value: ' . calculateColorSpaceValue ( $imageAutomnColor ));
echo ("\r\n");
echo ('Automn BW value: ' . calculateColorSpaceValue ( $imageAutomnBW ));
echo ("\r\n");
echo ('Automn Sepia value: ' . calculateColorSpaceValue ( $imageAutomnSepia ));
echo ("\r\n");
echo ("\r\n");
echo ('Desert colored value: ' . calculateColorSpaceValue ( $imageDesertColor ));
echo ("\r\n");
echo ('Desert BW value: ' . calculateColorSpaceValue ( $imageDesertBW ));
echo ("\r\n");
echo ('Desert Sepia value: ' . calculateColorSpaceValue ( $imageDesertSepia ));
function calculateColorSpaceValue($imageHandle) {
$RGBVariance = 0;
//Перебираем все пиксели
for($x = 0; $x < imagesx ( $imageHandle ); $x ++) {
for($y = 0; $y < imagesy ( $imageHandle ); $y ++) {
//Получаем цвет очередного пикселя
$color = imagecolorat ( $imageHandle, $x, $y );
//Разбираем его на RGB
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
//Рассчитываем сумму разниц между R, G и B значениями
$RGBVariance += (abs ( $r - $g ) + abs ( $r - $b ) + abs ( $r - $b ));
}
}
//Возвращаем коэффициент вариации
return ($RGBVariance / (imagesx ( $imageHandle ) * imagesx ( $imageHandle )));
}
?>
$RGBVariance += (abs ( $r - $g ) + abs ( $r - $b ) + abs ( $r - $b ));
$RGBVariance += (abs ( $r - $g ) + 2*abs ( $r - $b ));
function calculateColorSpaceValue($imageHandle) {
imagetruecolortopalette($imageHandle,false,256);
$RGBVariance = 0;
for ($i = imagecolorstotal($imageHandle); $i--;) {
extract(imagecolorsforindex($imageHandle,$i));
$RGBVariance += (abs ( $red - $green ) + abs ( $red - $blue ) + abs ( $green - $blue ));
}
return $RGBVariance / imagecolorstotal($imageHandle);
}
Совершенно верно. А еще неплохо бы применить как минимум чересстрочное сканирование. Незачем каждый пиксель изучатьоптимизация номер один - вынести imagesx ( $imageHandle ) из цикла =)
Но не с потерей отсутствия цвета.JPEG ведь с потерей качества сжимает
Ну мало ли, какой файл попадется клетчатый. Тогда уж лучше случайно выбирать.А еще неплохо бы применить как минимум чересстрочное сканирование
Это очевидно, что можно попиксельно сравнить. Интересно было бы, чтобы попиксельность осталась на долю C++, а не PHP.Перебор конечно тупой и грубый, но мне требовалось только привести пример. Функцию можно оптимизировать.