如何使用 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 与图像合并?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP imagecopymerge() 将源文件合并到目标的非透明区域?