Размытие по Гауссу удаляет все прозрачные пиксели из изображения.

  • Автор темы olga4
  • 43
  • Обновлено
  • 17, May 2024
  • #1
Я пытаюсь создать прозрачное изображение с черной фигурой. Затем используйте IMG_FILTER_GAUSSIAN_BLUR, чтобы немного размыть форму.

Проблема в том, что как только я применяю фильтр размытия, все изображение теряет прозрачные пиксели, и все изображение становится черным.

Поэтому, когда я копирую окончательное изображение на белое изображение, то вместо прозрачного изображения с какой-то размытой черной формой я получаю полностью черное изображение...

Что в этом плохого?

$image= imagecreatetruecolor(200, 200);

imagealphablending ($ image, false);

imagesavealpha($image, true);

$trans = imagecolorallocatealpha($image, 255, 255, 255, 127);

imagefill($image, 0,0, $trans);

$black= imagecolorallocatealpha($image, 0,0,0,0);

imagefilledrectangle($image, 50,50, 150,150, $black);

//header("Тип контента: изображение/png"); изображениеpng($изображение); Выход();

//выше наше основное изображение

//теперь я размываю это по Гауссу

imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);

/*

//теперь получаем самый левый пиксель, который должен быть 127.127.127.127

$rgb= imagecolorat($image, 0,0);

$c= imagecolorsforindex($image, $rgb);

echo $c['red']."/".$c['green']."/".$c['blue']."/".$c['alpha']."

" ;

//должно быть 255/255/255/127

//вместо этого сейчас 0/0/0/0...

*/

//копируем это на белое изображение

//все становится черным...

// вот в чем проблема, после применения размытия теряются все прозрачные пиксели

$w=imagesx($изображение);

$h=imagesy($image);

$img = imagecreatetruecolor($w, $h);

imagesavealpha($img, true);

$white= imagecolorallocatealpha($img, 255, 255, 255, 0);

imagefill($img, 0,0, $white);

imagecopyresampled($img, $image, 0,0, 0,0, $w,$h, $w,$h );

// это выведет черное изображение.

//вместо этого должно было появиться белое изображение с размытой «черной» фигурой.

//комментируем строку imagefilter, чтобы увидеть, что должно появиться (не размытым)

//Я хочу размытие

header("Тип контента: изображение/png"); изображениеpng($img); Выход();

olga4


Рег
11 Jan, 2011

Тем
1

Постов
2

Баллов
12
  • 21, May 2024
  • #2
Если это для вашего маленького создателя логотипов, именно поэтому я сказал, чтобы он генерировал HTML и CSS вместо изображения.

Или сделайте это на стороне клиента с помощью Canvas. Маленькая хитрость: вы можете захватить содержимое холста, закодировать его в Base64 и принудительно загрузить как изображение.
 

Manon Lescaut


Рег
17 Nov, 2012

Тем
1

Постов
4

Баллов
14
  • 21, May 2024
  • #3
Я полностью понимаю и полностью согласен с вами, что функции PHP GD не очень хороши для манипулирования изображениями. Я думаю, что поддержка альфа-канала была добавлена в PHP GD гораздо позже, поэтому существующие до этого функции до сих пор не работают с альфа-цветами. Но если я хочу разместить онлайн-инструмент, а мой сервер не поддерживает JAVA, то это единственный вариант, который у меня остается...
 

Александр Кузнецов1


Рег
02 Jan, 2013

Тем
0

Постов
3

Баллов
3
  • 21, May 2024
  • #4
Canvas — хорошая идея, но то, что я пытаюсь сделать, приведет к отправке огромного количества JavaScript в клиентский браузер.

Во-вторых, я не хочу, чтобы логика моего кода была просто скопирована другим веб-мастером.

С помощью JS Canvas они могут просто просмотреть исходный код HTML и скопировать все мои js...
 

demidof


Рег
14 May, 2012

Тем
0

Постов
2

Баллов
2
  • 11, Jun 2024
  • #5
Многие фильтры изображений GD несовместимы с прозрачными пленками.

Вот так оно и есть. Опять же, почему PHP совершенно неподходящий инструмент для такого рода задач.

Если бы вы могли отделить альфа-канал, размыть его отдельно, а затем повторно применить, вы могли бы что-то с этим сделать.

Проблема в том, что это тоже может дать странные результаты. По сути, перестаньте пытаться использовать PHP как нечто большее, чем просто связующее звено между базой данных и разметкой.

Он не подходит для этой задачи.
 

Джамбулат Загиров


Рег
13 Feb, 2012

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно