我正在使用PHP GD imagecopy
或imagecopyresampled
将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);
请帮忙。
答案 0 :(得分:1)
您可以查看此链接:
https://bugs.php.net/bug.php?id=23815
imagecopymerge不支持图像alpha。因此,他们要求创建一个新的功能imagecopymergealpha来完成这种工作。
答案 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);