Загрузить PNG изображение черный фон

Когда я загружаю изображение в формате png с помощью php, цвет фона изображения устанавливается на черный.
Я попытался установить прозрачный фон, но он не работает.
Это мой код:

if( $image_type == IMAGETYPE_PNG )
{
$dst_r = ImageCreateTrueColor($targ_w, $targ_h);
imagealphablending($dst_r, false);
imagesavealpha($dst_r, true);
imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w, $targ_h, $targ_w, $targ_h);
imagepng($dst_r,$filename, 9);
}

Отредактировано:

Я думал, что покончил с этой проблемой, но я ошибся:

$targ_w_thumb = $targ_h_thumb = 220;
if($image_type == IMAGETYPE_PNG)
{
$dst_r = ImageCreateTrueColor($targ_w_thumb, $targ_h_thumb);
imagealphablending($dst_r, false);
imagesavealpha($dst_r, true);
imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w_thumb, $targ_h_thumb, $targ_w, $targ_h);
imagepng($dst_r,$filename, 9);
}

0

Решение

imagecreatetruecolor() создает изображение, заполненное непрозрачным черным. Если вы сначала не наполняете свое новое изображение прозрачностью, черный цвет просвечивает позже.

Все, что вам нужно, это imagefill() с прозрачным цветом — а именно с черным, вот так:

imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));  // transparency values range from 0 to 127

Применительно к вашему коду это должно работать:

if( $image_type == IMAGETYPE_PNG )
{
$dst_r = ImageCreateTrueColor($targ_w, $targ_h);
imagealphablending($dst_r, false);
imagesavealpha($dst_r, true);

// Paint the watermark image with a transparent color to remove the default opaque black.
// If we don't do this the black shows through later colours.
imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));

imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w, $targ_h, $targ_w, $targ_h);
imagepng($dst_r,$filename, 9);
}
0

Другие решения

Я не знаю почему, но когда я добавил targ_w_thumb, он отлично работает + imagefill ():

    $targ_w_thumb = $targ_w_thumb = 200;
$dst_r = ImageCreateTrueColor($targ_w_thumb, $targ_h_thumb);
imagealphablending($dst_r, false);
imagesavealpha($dst_r, true);
imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w_thumb, $targ_h_thumb, $targ_w, $targ_h);
imagepng($dst_r,$filename, 9);
0

По вопросам рекламы [email protected]