我想用两张图片制作具有淡入淡出效果的混合图像。
这是我的PHP代码。
$img1 = new Imagick();
$img1->readImage("images/1.jpg");
$img2 = new Imagick();
$img2->setOption('compose:args', '50');
$img2->readImage("images/2.jpg");
$img1->compositeImage($img2, imagick::COMPOSITE_DISSOLVE, 0, 0);
$img1->writeImage("images/3.jpg");
此代码在我的Mac OS上正常运行。
但它不能在远程服务器(Cent OS 6.5)上运行,结果图像与2.jpg相同。
我尝试使用COMPOSITE_BLEND常量,效果很好。
我在终端尝试了这个命令。
# composite -dissolve 50 2.jpg 1.jpg 3.jpg
它也很有效。
为什么COMPOSITE_DISSOLVE不能在PHP中继续工作?
请帮帮我。
答案 0 :(得分:1)
您真的应该弄清楚您的开发环境和服务器之间的区别。很可能是开发服务器上的ImageMagick版本非常过时,除非您自己编译,因为Centos软件包管理系统似乎需要很长时间才能获得新版本。
然而......你混合图像的方式并不是很棒。虽然它可能适合您,但它需要定义稍差的$img2->setOption('compose:args', '50');
行。
更强大的技术是通过COMPOSITE_COPYOPACITY
自己控制Alpha通道。这使您可以完全控制图像的混合方式。例如
$img1 = new \Imagick();
$img1->readImage(realpath("../images/Biter_500.jpg"));
$img2 = new \Imagick();
$img2->readImage(realpath("../images/Skyline_400.jpg"));
//Resize images to the same size, to look pretty.
$img1->resizeimage(
$img2->getImageWidth(),
$img2->getImageHeight(),
\Imagick::FILTER_LANCZOS,
1
);
//Create an image that the alpha will be created in.
$opacity = new \Imagick();
if (true) {
//Create a 50% grey image
$opacity->newPseudoImage($img1->getImageWidth(), $img1->getImageHeight(), "CANVAS:gray(50%)");
}
else {
//Create a far more interesting blend.
//Gradients are created top to bottom, so we need to rotate the image
$opacity->newPseudoImage($img1->getImageHeight(), $img1->getImageWidth(), "gradient:gray(10%)-gray(90%)");
$opacity->rotateimage('black', 90);
}
$img2->compositeImage($opacity, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);
$img1->compositeImage($img2, \Imagick::COMPOSITE_ATOP, 0, 0);
header("Content-Type: image/jpg");
echo $img1->getImageBlob();
使用"CANVAS:gray(50%)"
创建不透明度图像的第一种方法可以完成现有图像代码的功能。第二种混合方式可以创建一个在图像宽度上混合10%到90%的图像。