Как узнать цвет пикселя в PHP
Все мы пользовались инструментом "Пипетка" в Paint, Photoshop и других графических редакторах, который позволяет узнать цвет пикселя в заданной точке. И как узнать цвет пикселя в PHP, мы разберём прямо сейчас.
Для того, чтобы узнать цвет в определённой точке изображения в PHP достаточно использовать всего лишь одну функцию - imageColorAt():
<?php
//Загрузка JPG-изображения из файла Image.jpg
$image = imageCreateFromJpeg("Image.jpg");
//Возвращаем цвет пикселя с координатами (10, 15) на изображении $image
$color = imagecolorat($image, 10, 15);
//Получаем составляющие цвета (red, green, blue)
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
//Выводим результат
echo $r."<br />";
echo $g."<br />";
echo $b."<br />";
//Освобождаем ресурсы сервера
imageDestroy($image);
?>
Единственный непростой момент - это получение составляющих цвета. Знак ">>" сдвигает все значащие биты вправо. Размер сдвига определяется числом, идущим после ">>". Один сдвиг вправо эквивалентен делению на 2.
Знак "&" означает "Побитовое И". Простой пример:
<?php
$n1 = decbin(10);
$n2 = decbin(14);
echo $n1."<br />";
echo $n2."<br />";
echo $n1 & $n2;
?>
Здесь мы переводим числа 10 и 14 из десятичной системы счисления в двоичную с помощью функции decbin(). Те, кто хоть немного понимают в различных системах счисления сразу поймут, что в переменные n1 и n2 запишутся числа "1010" и "1110" соответственно. Далее мы выполняем операцию "Побитовое И" и получаем на выходе "1010", так как только 2-й и 4-й разряды у обоих операндов имеют 1. Надеюсь, понятно объяснил.
Когда я писал прошивку для микроконтроллеров, то разобрался в этих системах счисления, во всех этих битовых операциях ОЧЕНЬ хорошо. Однако, до этого я имел очень смутное представление о их значении и прекрасно программировал. Так что, в принципе, Вы можете не вдумываться во всё это, а в данном случае просто скопировать получение составляющих цвета, либо вообще пользоваться только переменной color. Однако, если Вы будете серьёзно заниматься программирование, то изучить системы счисления придётся - это я гарантирую!
-
- Михаил Русаков
Комментарии (1):
Двоичная система мне пока не по зубам, вот придумал "человеческий" способ вычисления палитры RGB: $rr = floor(floor($color / 256)/256); $gg = floor(($color-256*256*$rr)/256); $bb = ($color-256*256*$rr)-256*$gg;
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.