PHP:将透明 PNG 添加到具有不透明度的 JPEG
Posted
技术标签:
【中文标题】PHP:将透明 PNG 添加到具有不透明度的 JPEG【英文标题】:PHP: Add a Transparent PNG to a JPEG with Opacity 【发布时间】:2012-03-11 15:14:27 【问题描述】:这似乎是一个常见问题,但尝试了所有组合,我发现它仍然不适合我。
我的 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 src="orgCar.jpg" title="original" alt"" />';
echo '<img src="newCar.jpg" title="copy" alt"" />';
echo '<img src="wmark.png" title="watermark" alt"" /><br>';
echo '<img src="newWM.jpg" title="New with Watermark" alt"" />';
echo '</div>';
?>
如果有一个简单的答案,我忽略了,那么我将非常感激,如果有人能指出我。
【问题讨论】:
this 好用吗? 我尝试了该选项,但它不会为水印创建不透明度。 【参考方案1】:问题是您传递给imagecopymerge()
的透明度量被使用而不是图像 Alpha 通道,而不是添加到其中。
你有两个选择:
1) 修改 PNG,使其包含 50% 的不透明度,然后使用imagecopy()
(我对其进行了测试并且工作正常)。请记住,真彩色 PNG 可以使用完整的 Alpha 通道,因此您可以在图像中包含半透明。
2) 使用此处描述的解决方法:
imagecopymerge_alpha
【讨论】:
我使用 Fireworks 尝试了您的绝妙想法,以减少水印的不透明度。它降低了水印的强度,但是当我做imagecopy()
时,外部的透明度起作用了,但主水印没有任何不透明性。在执行imagecopy()
之前,我是否需要将任何 GD 命令应用于我的水印,或者我是否需要使用不同的程序来创建不透明效果。
对于测试,我使用了您的代码并首先用 imagecopy() 替换了 imagecopymerge(),然后用 imagecopymerge_alpha() 替换(这两种方法产生相同的视觉结果)。也许 Fireworks 将 PNG 保存为 8 位(256 色)?对于完整的 alpha 通道,您需要将图像保存为 32 位,否则 PNG 就像 GIF 图像一样工作。您可以使用 Irfanview 检查图像的 PNG 格式:irfanview.com(图像 -> 信息)。以上是关于PHP:将透明 PNG 添加到具有不透明度的 JPEG的主要内容,如果未能解决你的问题,请参考以下文章