我整合了一个PHP类,使用PHP的GD函数执行各种与图像相关的功能。它适用于所有类型的图像。旋转、翻转、调整大小、裁剪和在较小程度上添加水印都工作得很好。除了最后一个之外,其他所有功能都完美运行。例如,在进行一些更改后,旋转的PNG图像保留了它们的透明度,而以前它们会失去这个并且背景变成黑色,这是一个常见的问题,但现在所有问题都已经解决。然而,我仍然遇到困难的是将一个PNG图像与另一个PNG图像添加水印。它似乎对JPG和其他图像可以正常工作。这是简化后的代码:
这是根据类似问题的各种指南和建议拼凑而成的。再次强调,使用JPG图像和PNG水印完美运作,但不支持PNG & PNG。
一些示例图像: http://i.imgur.com/hHRWinj.png - 这是我正在使用的水印。 http://i.imgur.com/6sy8Ncs.png - 这是我要应用水印的图像。 http://i.imgur.com/ghovYLm.png - 这是最终结果。
我发现有趣的是,水印覆盖在图像的非透明部分时,任何部分都可以正常工作。只有其余部分具有黑色背景。
这让我相信我已经接近解决方法了,希望您们专业的知识可以帮助我找到解决方案。
感谢您的阅读。
public function writeWatermarkSimple()
{
$watermarkFile = 'watermark.png';
$watermarkImage = imagecreatefrompng($watermarkFile);
imagealphablending($watermarkImage, false);
imagesavealpha($watermarkImage, true);
$imageFile = 'image.png';
$baseImage = imagecreatefrompng($imageFile);
imagealphablending($baseImage, false);
imagesavealpha($baseImage, true);
$marginH = imagesx($baseImage) - imagesx($watermarkImage);
$marginV = imagesy($baseImage) - imagesy($watermarkImage);
$cut = imagecreatetruecolor(imagesx($watermarkImage), imagesy($watermarkImage));
imagecopy($cut, $baseImage, 0, 0, $marginH, $marginV, imagesx($watermarkImage), imagesy($watermarkImage));
imagecopy($cut, $watermarkImage, 0, 0, 0, 0, imagesx($watermarkImage), imagesy($watermarkImage));
imagecopymerge($baseImage, $cut, $marginH, $marginV, 0, 0, imagesx($watermarkImage), imagesy($watermarkImage), 80);
if (!imagepng($baseImage, 'watermarked_image.png'))
{
return false;
}
return true;
}
这是根据类似问题的各种指南和建议拼凑而成的。再次强调,使用JPG图像和PNG水印完美运作,但不支持PNG & PNG。
一些示例图像: http://i.imgur.com/hHRWinj.png - 这是我正在使用的水印。 http://i.imgur.com/6sy8Ncs.png - 这是我要应用水印的图像。 http://i.imgur.com/ghovYLm.png - 这是最终结果。
我发现有趣的是,水印覆盖在图像的非透明部分时,任何部分都可以正常工作。只有其余部分具有黑色背景。
这让我相信我已经接近解决方法了,希望您们专业的知识可以帮助我找到解决方案。
感谢您的阅读。