Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:将透明PNG添加到不透明度的JPEG_Php_Png_Jpeg_Gd_Watermark - Fatal编程技术网

PHP:将透明PNG添加到不透明度的JPEG

PHP:将透明PNG添加到不透明度的JPEG,php,png,jpeg,gd,watermark,Php,Png,Jpeg,Gd,Watermark,这似乎是一个常见的问题,但尝试所有的组合,我发现,它仍然不适用于我 我的PNG水印是透明的,我希望用此水印覆盖原始JPG,并为水印添加50%的不透明度 添加水印并创建不透明度,但PNG的透明度渲染为不透明白色 我见过使用imagecopy的示例,但该函数没有添加不透明度的选项 我的代码如下: <?php $file = 'orgCar.jpg'; $newfile = 'newCar.jpg'; if (!copy($file, $newfile)) { echo "failed

这似乎是一个常见的问题,但尝试所有的组合,我发现,它仍然不适用于我

我的PNG水印是透明的,我希望用此水印覆盖原始JPG,并为水印添加50%的不透明度

添加水印并创建不透明度,但PNG的透明度渲染为不透明白色

我见过使用imagecopy的示例,但该函数没有添加不透明度的选项

我的代码如下:

<?php
$file = 'orgCar.jpg';
$newfile = 'newCar.jpg';

if (!copy($file, $newfile)) {
    echo "failed to copy $file...\n";
}
$tempIMG = imagecreatefromjpeg($newfile);
$wmkIMG = imagecreatefrompng('wmark.png');
imagealphablending($wmkIMG,true);

imagecopymerge($tempIMG, $wmkIMG, 755, 864, 0, 0, 465, 36, 50);

// Save the image to file and free memory
imagejpeg($tempIMG,'newWM.jpg');
imagedestroy($orgIMG);
imagedestroy($wmkIMG);

echo '<h3>Testing of Watermarking</h3>';
echo '<div>';
echo '<img width="160" src="orgCar.jpg" title="original" alt"" />';
echo '<img width="160" src="newCar.jpg" title="copy" alt"" />';
echo '<img width="240" src="wmark.png" title="watermark" alt"" /><br>';
echo '<img width="640" src="newWM.jpg" title="New with Watermark" alt"" />';
echo '</div>';
?>

如果有一个简单的答案,我忽略了,那么如果有人能告诉我,我将非常感激。

问题是,传递给imagecopymerge的透明度是使用的,而不是图像alpha通道,而不是添加到其中

您有两个选择:

1修改PNG,使其包含50%的不透明度,然后使用imagecopy。我对其进行了测试,效果良好。请记住,真彩色PNG可以使用完整的alpha通道,因此可以在图像中包含半透明度

2使用如下所述的解决方法:


有什么好处吗?我尝试过这个选项,但它并没有为水印创建不透明度。我尝试了你的好主意,使用焰火来降低水印的不透明度。它降低了水印的强度,但当我复制图像时,外部的透明度起作用,但主水印没有任何不透明性。在执行imagecopy之前,我是否需要对水印应用任何GD命令,或者我是否需要使用其他程序来创建不透明效果。对于测试,我使用了您的代码,先用imagecopy替换imagecopymerge,然后用imagecopymerge_alpha,这两种方法都会产生相同的视觉效果。也许焰火将PNG保存为8位256色?对于完整的alpha通道,您需要将图像保存为32位,否则PNG就像GIF图像一样工作。您可以使用Irfanview:image->Information检查图像的PNG格式。