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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: GD, прозрачность, замена цвета

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Jlblcblu
Отправлено: 15 Октября, 2013 - 16:14:45
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Добрый день, подскажите, пожалуйста, как сменить цвет в градиенте?

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

Таким образом получается градиент от красного (с той насыщенностью, что у белого) до прозрачного.
Прикреплено изображение (Нажмите для увеличения)
tmp.png
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Октября, 2013 - 17:21:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




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.  

(Отредактировано автором: 15 Октября, 2013 - 23:06:23)

 
 Top
Jlblcblu
Отправлено: 15 Октября, 2013 - 20:03:13
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Март 2010  


Помог: 1 раз(а)




Большое спасибо, скрипт действительно работает так как нужно. Но разве встроенными средствами гд это нельзя решить? Перебор всех пикселей, думаю, не самая лучшая идея
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Октября, 2013 - 20:20:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




А другого варианта GD не предоставляет.
 
 Top
shurakana
Отправлено: 10 Сентября, 2014 - 05:00:08
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)




armancho7777777 Подскажите пожалуйста как аккуратно убрать белый фон на примере этой функции, скажем у простой фотки?

Плюс ведь еще оттенки белого разные бывают, это вообще возможно?
 
 Top
armancho7777777 Супермодератор
Отправлено: 10 Сентября, 2014 - 17:57:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Если все 3 канала (r == g == b) совпадают, значит это либо чёрный, либо белый, либо оттенки серого.
Соответственно чем ближе к 255-ти, тем прозрачнее.
Вычисляете процентное соотношение, чтобы потом задать уровень прозрачности текущего пиксела.
Но без изъяна всё равно не выйдет.

(Отредактировано автором: 10 Сентября, 2014 - 18:30:13)

 
 Top
shurakana
Отправлено: 10 Сентября, 2014 - 18:36:28
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)




Спасибо, но я ничего не понял, то ли в синтаксисе дело то-ли во мне...))

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

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

А у вас все плавно так..

(Отредактировано автором: 10 Сентября, 2014 - 18:39:59)

 
 Top
Webtest
Отправлено: 11 Сентября, 2014 - 11:21:45
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Раз уж такая тема, хотел спросить на счет ГД, как там сделать искриление изображения?
Т.е. у меня, допустим, выводится изображение, а я хотел бы чтобы онобыло немного искривлено как-нибудь, например, как-буто часть была захвачена и растянута. (как обычно в выведении капчи делают)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB