- 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); Выход();
Проблема в том, что как только я применяю фильтр размытия, все изображение теряет прозрачные пиксели, и все изображение становится черным.
Поэтому, когда я копирую окончательное изображение на белое изображение, то вместо прозрачного изображения с какой-то размытой черной формой я получаю полностью черное изображение...
Что в этом плохого?
$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); Выход();