перекрасить определенный пиксель в изображении

Тема в разделе "PHP", создана пользователем maxy666, 31 мар 2013.

Модераторы: latteo
  1. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    126
    Симпатии:
    31
    Помогите пожалуйста в следующем:
    Существует задача перекрасить ( осветлить или затемнить пиксели картинки), которые не попадают в диапазон rpg .
    Посоветуйте пожалуйста может есть какие то функции для этого, или посмотрите что не так в данном коде, возникает проблема записать изменений пик сель на картинку
    Код:
    / / Обрабатываем пиксели которые сильно отличаться от нужных значений
    / / Выбираем из базы значение по которым будут равняться пиксели
    $image_r = $row['r'];
    $image_g = $row['g'];
    $image_b= $row['b'];
    $image_obob = $row['url_image'];
    // Узнаем размер изображение
    $rozmi_y = imagesy($image_obob);
    $rozmir_x = imagesx($image_obob);
     
    // Делаем проверку в цикле каждого пикселя
    for( $h = 0; $h <= $rozmir_y; $h ++ ){
    for( $w = 0; $w <= $rozmir_x; $w ++ )
    {
    // Узнаем цвет пикселя в координатах $w, $h
    $color = imagecolorat( $image_obob, $w, $h );
    $r = ($color >> 16) & 0xFF;
    $g = ($color >> 8) & 0xFF;
    $b = $color & 0xFF;
    $x = $w;
    $y = $h;
    // Заносим изначальные значение цвета пикселя
    $iznach_r = $r;
    $iznach_g = $g;
    $iznach_b = $b;
    // Проверяем red цвет
    if ($r < "$image_r - 50")
    {$r = "$r+50";}
    elseif ($r < "$image_r + 50")
    {$r = "$r-50";}
    echo $r;
    // Проверяем green цвет
    if ($g < "$image_g - 50")
    {$g = "$g+50";}
    elseif ($g < "$image_g + 50")
    {$g = "$g-50";}
    // Проверяем blue цвет
    if ($b < "$image_b - 50")
    {$b = "$b+50";}
    elseif ($b < "$image_b + 50")
    {$b = "$b-50";}
     
    // Проверяем нужно ли делать перекрашивание пикселя
    if ($iznach_r <> $r OR $iznach_g <> $g OR $iznach_b <> $b)
    {
    // Записываем значение в пиксель
    $image_obob =imagecreatefromjpeg($image_obob);
    $picsl_color = imagecolorallocate ($image_obob, $r, $g ,$b );
    imagesetpixel ($image_obob , $rozmir_x , $rozmir_y , $picsl_color);
    }
     
    }}
    
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.522
    Симпатии:
    1.374
    PHP:
    Включи отображение нотайсов и сам увидишь:
    @
    ini_set('error_reporting',8191);    error_reporting(8191); //8191    E_ALL ^ E_NOTICE    
    @ini_set('display_errors','On'); // 'On' - true;    
    @ini_set('html_errors'true);
    У тебя размер получается в одну переменную $rozmi_y = imagesy($image_obob);
    а цикл запускаешь для другой for( $h = 0; $h <= $rozmir_y; $h ++ ){
    ошибка в одну букву

    И скобки убери из математических выражений "$image_g - 50" ...
     
  3. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    126
    Симпатии:
    31
    cпасибо подправил....но все равно не работает
    сильно с функциями изображений не разбираюсь
    думаю ошибка в строках
    // Записываем значение в пиксель
    $image_obob =imagecreatefromjpeg($image_obob);
    $picsl_color = imagecolorallocate ($image_obob, $r, $g ,$b );
    imagesetpixel ($image_obob , $rozmir_x , $rozmir_y , $picsl_color);