Как узнать цвет пикселя в PHP
Все мы пользовались инструментом «Пипетка» в Paint, Photoshop и других графических редакторах, который позволяет узнать цвет пикселя в заданной точке. И как узнать цвет пикселя в PHP, мы разберём прямо сейчас.
Для того, чтобы узнать цвет в определённой точке изображения в PHP достаточно использовать всего лишь одну функцию — imageColorAt():
//Загрузка 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.»
«;
echo $g.»
«;
echo $b.»
«;
//Освобождаем ресурсы сервера
imageDestroy($image);
?>
Единственный непростой момент — это получение составляющих цвета. Знак «>>» сдвигает все значащие биты вправо. Размер сдвига определяется числом, идущим после «>>«. Один сдвиг вправо эквивалентен делению на 2.
Знак «&» означает «Побитовое И«. Простой пример:
Здесь мы переводим числа 10 и 14 из десятичной системы счисления в двоичную с помощью функции decbin(). Те, кто хоть немного понимают в различных системах счисления сразу поймут, что в переменные n1 и n2 запишутся числа «1010» и «1110» соответственно. Далее мы выполняем операцию «Побитовое И» и получаем на выходе «1010«, так как только 2-й и 4-й разряды у обоих операндов имеют 1. Надеюсь, понятно объяснил.
Когда я писал прошивку для микроконтроллеров, то разобрался в этих системах счисления, во всех этих битовых операциях ОЧЕНЬ хорошо. Однако, до этого я имел очень смутное представление о их значении и прекрасно программировал. Так что, в принципе, Вы можете не вдумываться во всё это, а в данном случае просто скопировать получение составляющих цвета, либо вообще пользоваться только переменной color. Однако, если Вы будете серьёзно заниматься программирование, то изучить системы счисления придётся — это я гарантирую!
Создано 30.03.2011 19:14:45
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 1 ):
Двоичная система мне пока не по зубам, вот придумал «человеческий» способ вычисления палитры RGB: $rr = floor(floor($color / 256)/256); $gg = floor(($color-256*256*$rr)/256); $bb = ($color-256*256*$rr)-256*$gg;
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
ImagickPixel::getColor
Returns the color described by the ImagickPixel object, as an array. If the color has an opacity channel set, this is provided as a fourth value in the list.
Parameters
Normalize the color values. Possible values are 0 , 1 or 2 .
normalized | Description |
---|---|
0 | The RGB values are returned as int s in the range 0 to 255 (inclusive.) The alpha value is returned as int and is either 0 or 1 . |
1 | The RGBA values are returned as float s in the range 0 to 1 (inclusive.) |
2 | The RGBA values are returned as int s in the range 0 to 255 (inclusive.) |
Return Values
An array of channel values. Throws ImagickPixelException on error.
Examples
Example #1 Basic Imagick::getColor() usage
//Create an ImagickPixel with the predefined color ‘brown’
$color = new ImagickPixel ( ‘brown’ );
//Set the color to have an alpha of 25%
$color -> setColorValue ( Imagick :: COLOR_ALPHA , 64 / 256.0 );
$colorInfo = $color -> getColor ();
echo «Standard values» . PHP_EOL ;
print_r ( $colorInfo );
$colorInfo = $color -> getColor ( 1 );
echo «Normalized values:» . PHP_EOL ;
print_r ( $colorInfo );
The above example will output:
Standard values Array ( [r] => 165 [g] => 42 [b] => 42 [a] => 0 ) Normalized values: Array ( [r] => 0.64705882352941 [g] => 0.16470588235294 [b] => 0.16470588235294 [a] => 0.25000381475547 )
User Contributed Notes 1 note
In case you use default un-normalized getColor value the alpha value will always be either 0 or 1.
If you want to use real full-range 0-1 alpha channel on your 24bit transparent images use the alpha value from the normalized one, even if you use the rest of unnormalized data.
To copy a 24bit png with real alpha transparency, you would have to do this:
$im =new Imagick ( ‘image.png’ );
$iterator = $im -> getPixelIterator ();
foreach ( $iterator as $row => $pixels ) foreach ( $pixels as $column => $pixel ) $un_color = $pixel -> getColor (); //unnormalized color
$nor_color = $pixel -> getColor ( true ); //normalized color
$pixel -> setColor ( ‘rgba(‘ . $un_color [ ‘r’ ]. ‘,’ . $un_color [ ‘g’ ]. ‘,’ . $un_color [ ‘b’ ]. ‘,’ . $nor_color [ ‘a’ ]. ‘)’ );
>
>
?>
If you use ‘a’ (alpha) value from the unnormalized color there will only be binary transparency.