如何使用 PHP 将透明 PNG 与图像合并?

Posted

技术标签:

【中文标题】如何使用 PHP 将透明 PNG 与图像合并?【英文标题】:How to merge transparent PNG with image using PHP? 【发布时间】:2010-11-26 12:21:59 【问题描述】:

情况是这样的:我有一张 50x50 的小图片。我还有一张 50x50 的小透明图片,其中包含 50x50 图片的框架,所以我基本上想将透明 png 放在图像的顶部,然后合并这两个图片,这将导致最后的第三张图片看起来像这样:http://img245.imageshack.us/i/50x50n.png

注意:我不想只使用 html 来做到这一点(我通过编写一个将透明 png 放在原始图像顶部的 javascript 插件来实现这一点)。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用ImageMagick :: Composite 来完成。第一个用户提供的注释应该足以掌握这个概念。

【讨论】:

【参考方案2】:

您可以使用 php GD2 库将两个图像合并在一起。

例子:

<?php
 # If you don't know the type of image you are using as your originals.
 $image = imagecreatefromstring(file_get_contents($your_original_image));
 $frame = imagecreatefromstring(file_get_contents($your_frame_image));

 # If you know your originals are of type PNG.
 $image = imagecreatefrompng($your_original_image);
 $frame = imagecreatefrompng($your_frame_image);

 imagecopymerge($image, $frame, 0, 0, 0, 0, 50, 50, 100);

 # Save the image to a file
 imagepng($image, '/path/to/save/image.png');

 # Output straight to the browser.
 imagepng($image);
?>

【讨论】:

我试过这个,但我的透明框架在中间变白了。应该是什么问题。 您可能需要在最后一行之前添加 header('Content-Type: image/png'); 以确保将正确的 MIME 类型发送到浏览器 这对我也不起作用,它似乎没有保存 alpha 通道。我还尝试添加下面用户提到的 alpha 混合标志。【参考方案3】:

如果您想在图像上保持 PNG 帧透明度,请在 imagecopymerge() 之前添加 imagealphablending($frame,true);

【讨论】:

图像仍然通过白色透明区域。 我得到了同样的结果。有解决方案吗?

以上是关于如何使用 PHP 将透明 PNG 与图像合并?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PIL 将透明 png 图像与另一个图像合并

如何使用 PHP imagecopymerge() 将源文件合并到目标的非透明区域?

使用 PHP GD 库合并两个 PNG 图像

Gif 图像格式中如何合并透明度

如何改进我的 php 图像调整器以支持 alpha png 和透明 GIF

合并图像并保持透明度