Добавление непрозрачности на изображение с помощью imagecopymerge в PHP - PullRequest
1 голос
/ 01 марта 2012

Вот моя проблема:

Я хочу изменить непрозрачность изображения, скопировав его на другое прозрачное изображение.

Мой код:

$opacity = 50;

$transparentImage = imagecreatetruecolor($width, $height);
imagesavealpha($transparentImage, true);
$transColour = imagecolorallocatealpha($transparentImage , 0, 0, 0, 127);
imagefill($transparentImage , 0, 0, $transColour);

imagecopymerge($transparentImage, $image, 0, 0, 0, 0, $width, $height, $opacity);

$image = $transparentImage;

header('Content-type: image/png');
imagepng($image);

При этом, когда я использую imagecopymerge, $ transparentImage теряет прозрачность ... Таким образом, $ изображение сливается на черном изображении ... а не на прозрачном изображении!

Однако, когда я показываю $ transparentImage перед вызовом imagecopymerge, изображение прозрачно в моем навигаторе!

Есть ли решение изменить непрозрачность моего изображения, не добавляя его на цветной фон?

1 Ответ

1 голос
/ 01 марта 2012

Кажется, что imagecopymerge не поддерживает альфа-канал (прозрачность) на изображениях. К счастью, вы можете использовать обходной путь с imagecopy, чтобы сделать это правильно. Вот функция для этого, взятая из комментариев на php.net:

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
    // creating a cut resource
    $cut = imagecreatetruecolor($src_w, $src_h);

    // copying relevant section from background to the cut resource
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);

    // copying relevant section from watermark to the cut resource
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);

    // insert cut resource to destination image
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
} 
...