使用 gd 将两个 images.png 合并到 output.png
Posted
技术标签:
【中文标题】使用 gd 将两个 images.png 合并到 output.png【英文标题】:Merge two images.png to output.png using gd 【发布时间】:2021-08-12 22:00:00 【问题描述】:我一直在尝试使用 gd lib 合并两个图像。 一张卡片(背景)和一张卡片的“新”框架(前景,中间是透明的)。
这是我的代码:
<?php
$card = imagecreatefrompng('img/folder1/card.png');
$frame = imagecreatefrompng('img/folder2/frame.png');
list($width,$height) = getimagesize($frame);
imagealphablending($card, true);
imagesavealpha($card, true);
imagecopy($card, $frame, 0, 0, 0, 0, $width, $height, 100);
header('Content-Type: image/png');
imagepng($card);
我确实得到了输出,但它只是没有框架的卡片。
亲切的问候, 采埃孚
编辑(12 小时后):
我弄清楚了为什么我的输出只是卡片(背景),而不管我的更改如何。
我删除了 $height 之后的最后一个值 100:
imagecopy($card, $frame, 0, 0, 0, 0, $width, $height);
现在我的输出只有 frame.png。 我使用 ImageAlphaBlending 没关系。
但我知道 card.png 肯定在 frame.png 下,因为我将 frame.png 移到了一边轴,并且 card.png 变得可见。 所以它无法将图像合并在一起,尊重 frame.png
的透明度如果我将输出保存到文件中,它是一个透明的 .png 文件。
imagecopy 是否适合将带有透明中间的 frame.png 合并到背景 (card.png) 上?
编辑: 对不起,混乱! 我同时使用两个版本。 我现在已经清理了我当前的工作空间,并从头开始编写了一个新版本。
我确实删除了我在此处发布的版本中 $height 之后的 100:
imagecopy($card, $frame, 0, 0, 0, 0, $width, $height);
对先前编辑的澄清:根本没有改变。 输出仍然只有 card.png。
但是我的新版本的代码是(Final & Working):
<?php
$card = imagecreatefrompng('img/folder1/card.png');
$frame = imagecreatefrompng('img/folder2/frame.png');
$width = "402"; $height = "599";
imagealphablending($card, true);
imagesavealpha($card, true);
imagecopy($card, $frame, 0, 0, 0, 0, $width, $height);
header('Content-Type: image/png');
imagepng($card);
imagedestroy($card);
imagedestroy($frame);
您可能注意到我对图像width 和height 进行了硬编码。
而不是使用 getimagesize
list($width,$height) = getimagesize($frame);
我之前确实检查了 $width、$height 的输出,它们是正确的,但这似乎是我的问题。 如果有人对此有答案,请随时解释!
【问题讨论】:
酷!做得好!我更喜欢使用 imagick 而不是 gd。 imagick 也更快。 因为getimagesize问题。实际上,它应该像这样工作。也许是PNG本身。例如,错误的格式类型。可以显示类型:list($width, $height, $type, $attr) = getimagesize("image_name.png"); PNG 应该是类型 3。 【参考方案1】:我放弃了这个项目很长一段时间。 正如Maik 建议的那样,这可能是.png 格式的问题。
我应该说什么...建议和知识随着时间而来:
事实上,错误不是由getimagesize
产生的,因此不需要对图像大小进行硬编码。
这是一个普通的图像格式问题。
我从头开始编写的提到的“新版本”只是使用了不同格式的 .png 图像。
当时我只是不知道,因为我显然从创作者那里得到了相同的图像,但它是不同的渲染,因此是不同的格式类型。
支持 Maik,并检查您的 .png 格式类型(类型 3)。
编辑:哦,也许看看 imagick ;)
【讨论】:
以上是关于使用 gd 将两个 images.png 合并到 output.png的主要内容,如果未能解决你的问题,请参考以下文章