2

私は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);

助けてください。

4

3 に答える 3

1

このリンクを見ることができます:

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

imagecopymerge はイメージ アルファをサポートしていません。そのため、彼らはこの種の仕事を行うための新しい関数 imagecopymergealpha の作成を要求しました。

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

于 2012-11-29T10:19:39.647 に答える
0
imagecopymerge($img1, $img2, 0, 0, 0, 0, $x1, $y1, 50);

header('Content-Type: image/png');
imagepng($img1);
于 2012-11-05T11:49:00.770 に答える
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);
于 2012-11-05T11:51:27.960 に答える