В продолжение темы статей на PHP, рассмотрим сегодня один замечательный php класс, который определяет наиболее популярные цвета в изображении и выводит данные в табличку с указанием кода цвета и количеством пикселей, занятых этим цветом.
Данный класс будет весьма полезным для сайтов фотографов, как один из элементов навигации по сайту! С помощью этого класса можно открыть графический файл в формате GIF, JPEG или PNG.
Этот класс представляет собой решение для поиска наиболее доминирующих цветов, используемых в изображении, используется только PHP код без каких-либо специальных расширений PHP, за исключением функций GD библиотеки. Вот непосредственно сам класс:
class GetMostCommonColors
{
/* Имя файла изображения (это может быть JPG, GIF или PNG изображения)
@var string */
var $image;
/* Возвращает цвет изображения в массив, упорядоченный в порядке убывания, где коды цвета и количество пикселей занятых цветом.
@return array */
function Get_Color()
{
if (isset($this->image))
{
$PREVIEW_WIDTH = 150; // Изменияем размер изображения.
$PREVIEW_HEIGHT = 150;
$size = GetImageSize($this->image);
$scale=1;
if ($size[0]>0)
$scale = min($PREVIEW_WIDTH/$size[0], $PREVIEW_HEIGHT/$size[1]);
if ($scale < 1)
{
$width = floor($scale*$size[0]);
$height = floor($scale*$size[1]);
}
else
{
$width = $size[0];
$height = $size[1];
}
$image_resized = imagecreatetruecolor($width, $height);
if ($size[2]==1)
$image_orig=imagecreatefromgif($this->image);
if ($size[2]==2)
$image_orig=imagecreatefromjpeg($this->image);
if ($size[2]==3)
$image_orig=imagecreatefrompng($this->image);
imagecopyresampled($image_resized, $image_orig, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); // Копируем и изменяем размеры части изображения с пересэмплированием!
$im = $image_resized;
$imgWidth = imagesx($im);
$imgHeight = imagesy($im);
for ($y=0; $y < $imgHeight; $y++)
{
for ($x=0; $x < $imgWidth; $x++)
{
$index = imagecolorat($im,$x,$y);
$Colors = imagecolorsforindex($im,$index);
$Colors['red']=intval((($Colors['red'])+15)/32)*32; // Сокращаем количество цветов, чтобы не было повторений.
$Colors['green']=intval((($Colors['green'])+15)/32)*32;
$Colors['blue']=intval((($Colors['blue'])+15)/32)*32;
if ($Colors['red']>=256)
$Colors['red']=240;
if ($Colors['green']>=256)
$Colors['green']=240;
if ($Colors['blue']>=256)
$Colors['blue']=240;
$hexarray[]=substr("0".dechex($Colors['red']),-2).substr("0".dechex($Colors['green']),-2).substr("0".dechex($Colors['blue']),-2);
}
}
$hexarray=array_count_values($hexarray);
natsort($hexarray);
$hexarray=array_reverse($hexarray,true);
return $hexarray;
}
else die("Вы должны указать имя файла! (\$image параметр)");
}
}
Остается только подключить класс к php страничке и вызвать его с параметром. Параметром является путь до файла и его имя. Также можно указать количество показываемых цветов, переменная $how_many. После в цикле выводим табличку с указанием кода цвета и количеством пикселей, занятых этим цветом.
<?php
include_once("colors.inc.php");
$ex=new GetMostCommonColors();
$ex->image="test.jpg";
$colors=$ex->Get_Color();
$how_many=15;
$colors_key=array_keys($colors);
?>
<table border="1">
<tr><th colspan="3">test.jpg</th></tr>
<tr><td>Цвет</td><td>Количество</td><td>Код цвета</td></tr>
<?php
for ($i = 0; $i <= $how_many; $i++)
{
echo "<tr><td bgcolor=".$colors_key[$i]." width=16 height=16></td> <td>".$colors[$colors_key[$i]]."</td><td>$colors_key[$i]</td></tr>";
}
?>
</table>
Статью завершаю. Надеюсь Вы найдете применении этому PHP классу.
Источник: http://xozblog.ru