Здравствуйте уважаемые читатели XoZblogа! В продолжение темы статей на PHP, рассмотрим сегодня один замечательный php класс, который определяет наиболее популярные цвета в изображении и выводит данные в табличку с указанием кода цвета и количеством пикселей, занятых этим цветом.
Данный класс будет весьма полезным для сайтов фотографов, как один из элементов навигации по сайту! С помощью этого класса можно открыть графический файл в формате GIF, JPEG или PNG. Чтобы наглядно посмотреть php класс в работе нажмите на кнопку ДЕМО, или скачайте архив с файлом класса и тестовой страницей кнопка ИСХОДНИКИ.
Этот класс представляет собой решение для поиска наиболее доминирующих цветов, используемых в изображении, используется только PHP код без каких-либо специальных расширений PHP, за исключением функций GD библиотеки. Вот непосредственно сам класс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 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. После в цикле выводим табличку с указанием кода цвета и количеством пикселей, занятых этим цветом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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 классу. Не забывайте оставлять комментарии! Спасибо)
бумажные обои для стен
Источник статьи/урока: https://xozblog.ru