如何合并两个图形文件? (PHP,Imagick)

时间:2016-03-21 20:40:46

标签: php image imagick

我有两个图形文件。

第一张图片 - JPG格式的背景图片

第二个文件 - PNG文件,中间的图形填充白色,路径上有黑色边框。透明PNG文件的主要背景。

问题: 如何合并两个透明文件(参见图片示例)?第一个文件的背景应该放在第二个文件的图中。

方案:

example images

图片:

PNG文件 - profiles.in.ua/tmp/sample2.jpg

JPG文件 - profiles.in.ua/tmp/sample1.png

PHP代码:

$mask = new Imagick(realpath('mask.png'));
$pattern = new Imagick(realpath('pattern.jpg'));
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1);
$pattern->compositeImage($mask, Imagick::COMPOSITE_ATOP, 0, 0);
header("Content-Type: image/png");
echo $pattern->getImageBlob();
$mask->destroy();
$pattern->destroy();

2 个答案:

答案 0 :(得分:2)

假设掩模图像总是由白色像素(应该用图案覆盖),黑色像素(应该覆盖图案)和透明像素(应保持透明)组成,您可以通过以下方式获得此效果:将图案合成到蒙版中的非透明像素中,然后使用蒙版使结果变暗。

您提供的PNG文件没有指定的透明背景;相反,它是白色和灰色的孵化。在此代码工作之前,我必须首先编辑它以添加透明背景。

$mask = new Imagick(realpath('sample1.png'));
$pattern = new Imagick(realpath('sample2.jpg'));
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1);

$image = clone($mask);
$image->compositeImage($pattern, Imagick::COMPOSITE_IN, 0, 0);
$image->compositeImage($mask, Imagick::COMPOSITE_DARKEN, 0, 0);

header("Content-Type: image/png");
echo $image;

$image->destroy();
$mask->destroy();
$pattern->destroy();

答案 1 :(得分:0)

您需要修复代码的结尾。一切都好到结束。

$base->writeImage('output.png');
header("Content-Type: image/png");
echo $base; 

更新我:)