Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: GD, прозрачность, замена цвета
Форумы портала PHP.SU » » Вопросы новичков » GD, прозрачность, замена цвета

Страниц (1): [1]
 

1. Jlblcblu - 15 Октября, 2013 - 16:14:45 - перейти к сообщению
Добрый день, подскажите, пожалуйста, как сменить цвет в градиенте?

Прикрепленная картинка - градиент от белого до прозрачного. Необходимо заменить белый цвет на красный, например.

Таким образом получается градиент от красного (с той насыщенностью, что у белого) до прозрачного.
2. armancho7777777 - 15 Октября, 2013 - 17:21:27 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. /**
  3. * @patam $src source image
  4. * @patam $rgb array rgb color
  5. */
  6. function imageReplaceColor(&$src, array $rgb)
  7. {
  8.     imagealphablending($src, false);
  9.     imagesavealpha($src, true);
  10.    
  11.     $srcW = imagesx($src);
  12.     $srcH = imagesy($src);
  13.  
  14.     for($x = 0; $x < $srcW; $x++)
  15.     {
  16.         for($y = 0; $y < $srcH; $y++)
  17.         {
  18.             $srcColor = imagecolorsforindex($src, imagecolorat($src, $x, $y));
  19.  
  20.             $srcColor = imagecolorallocatealpha(
  21.                 $src, $rgb[0], $rgb[1], $rgb[2], $srcColor['alpha']
  22.             );
  23.  
  24.             imagesetpixel($src, $x, $y, $srcColor);
  25.         }
  26.     }
  27. }
  28.  
  29. $image = imagecreatefrompng('sample.png');
  30. imageReplaceColor($image, array(255, 0, 0));
  31.  
  32. header('Content-type: image/png');
  33. imagepng($image);
  34.  
3. Jlblcblu - 15 Октября, 2013 - 20:03:13 - перейти к сообщению
Большое спасибо, скрипт действительно работает так как нужно. Но разве встроенными средствами гд это нельзя решить? Перебор всех пикселей, думаю, не самая лучшая идея
4. armancho7777777 - 15 Октября, 2013 - 20:20:58 - перейти к сообщению
А другого варианта GD не предоставляет.
5. shurakana - 10 Сентября, 2014 - 05:00:08 - перейти к сообщению
armancho7777777 Подскажите пожалуйста как аккуратно убрать белый фон на примере этой функции, скажем у простой фотки?

Плюс ведь еще оттенки белого разные бывают, это вообще возможно?
6. armancho7777777 - 10 Сентября, 2014 - 17:57:17 - перейти к сообщению
Если все 3 канала (r == g == b) совпадают, значит это либо чёрный, либо белый, либо оттенки серого.
Соответственно чем ближе к 255-ти, тем прозрачнее.
Вычисляете процентное соотношение, чтобы потом задать уровень прозрачности текущего пиксела.
Но без изъяна всё равно не выйдет.
7. shurakana - 10 Сентября, 2014 - 18:36:28 - перейти к сообщению
Спасибо, но я ничего не понял, то ли в синтаксисе дело то-ли во мне...))

Вчера всю ночь пытался в цикле ImageColorTransparent сделать (пока прописать вручную все цвета) так ничего не получилось, берет последний и применяет, пытался даже сохранить и снова открыть в цикле, все равно не выходит..

Да и ImageColorTransparent ужасно с плавностью работает... Вернее НЕ работает..)) тем более что картинка 40х40..
Ну ладно что без изъяна не выйдет, но я думаю не так как ImageColorTransparent...

А у вас все плавно так..
8. Webtest - 11 Сентября, 2014 - 11:21:45 - перейти к сообщению
Раз уж такая тема, хотел спросить на счет ГД, как там сделать искриление изображения?
Т.е. у меня, допустим, выводится изображение, а я хотел бы чтобы онобыло немного искривлено как-нибудь, например, как-буто часть была захвачена и растянута. (как обычно в выведении капчи делают)

 

Powered by ExBB FM 1.0 RC1