想要使用50%不透明度的imagecopy或imagecopyresampled

时间:2012-11-05 11:44:47

标签: php gd

我正在使用PHP GD imagecopyimagecopyresampled将PNG图像与透明度合并到另一个PNG图像上(基本上创建带设计的T恤模型)。

当我使用imagecopymerge()时,它不尊重透明度。但不透明度设置选项有效。但是当我使用imagecopy()imagecopyresampled()时,透明度会起作用,但不透明度设置不可用。

那么如何合并尊重透明度的图像并提供50%的不透明度呢?

我的代码是:

$img1 = imagecreatefrompng('m1.png');
$img2 = imagecreatefrompng('m2.png');

imagealphablending( $img2, false );
imagesavealpha( $img2, true );

$x1 = imagesx($img1);
$y1 = imagesy($img1);
$x2 = imagesx($img2);
$y2 = imagesy($img2);

//imagecopyresampled($img1, $img2, 205, 170, 0, 0, $x2-40, $y2-40, $x2, $y2);
imagecopy($img1, $img2, 205, 170, 0, 0, $x2-40, $y2-40);

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

请帮忙。

3 个答案:

答案 0 :(得分:1)

您可以查看此链接:

https://bugs.php.net/bug.php?id=23815

imagecopymerge不支持图像alpha。因此,他们要求创建一个新的功能imagecopymergealpha来完成这种工作。

https://github.com/php/php-src/pull/211

答案 1 :(得分:0)

imagecopymerge($img1, $img2, 0, 0, 0, 0, $x1, $y1, 50);

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

答案 2 :(得分:0)

请使用此示例代码检查

$imageName = 'path/to/your/image/file'
$im_src = create_image_from_type($imageName);
$size = getimagesize($imageName);
$im_dst = create_image_from_type($imageName);
$white = imagecolorallocate($im_dst, 255, 255, 255);
imagecolortransparent($im_dst, $white);
imagefilledrectangle($im_dst, 0, 0, $size[0], $size[1], $white);
$opacityVal = 50;// put the opacity value here
imagecopymerge($im_dst, $im_src, 0, 0, 0, 0,$size[0], $size[1], $opacityVal);
save_image($im_dst, $imageName, 100);