我有两个图形文件。
第一张图片 - JPG格式的背景图片
第二个文件 - PNG文件,中间的图形填充白色,路径上有黑色边框。透明PNG文件的主要背景。
问题: 如何合并两个透明文件(参见图片示例)?第一个文件的背景应该放在第二个文件的图中。
方案:
图片:
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();
答案 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;
更新我:)