Как получить цвет пикселя php

Как узнать цвет пикселя в PHP

Как узнать цвет пикселя в 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. Надеюсь, понятно объяснил.

Читайте также:  Java directory wordpress theme

Когда я писал прошивку для микроконтроллеров, то разобрался в этих системах счисления, во всех этих битовых операциях ОЧЕНЬ хорошо. Однако, до этого я имел очень смутное представление о их значении и прекрасно программировал. Так что, в принципе, Вы можете не вдумываться во всё это, а в данном случае просто скопировать получение составляющих цвета, либо вообще пользоваться только переменной color. Однако, если Вы будете серьёзно заниматься программирование, то изучить системы счисления придётся — это я гарантирую!

Создано 30.03.2011 19:14:45

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. 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 .

    List of possible values for normalized

    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.

    Источник

    Оцените статью