我想从两幅图像中制作出具有褪色效果的混合图像。
这是我的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上正确工作。
但是它不能在远程服务器上工作(分为OS6.5),结果映像与2.jpg相同。
我试过用COMPOSITE_BLEND常数,它工作得很好。
我在终端机试过命令。
# composite -dissolve 50 2.jpg 1.jpg 3.jpg它也很好用。
为什么COMPOSITE_DISSOLVE常量在PHP中不起作用?
请帮帮我。
发布于 2014-05-14 01:14:45
您确实应该弄清楚开发环境和服务器之间的区别。开发服务器上的ImageMagick版本很可能已经过时,除非您自己正在编译它,因为Centos包管理系统似乎需要很长时间才能获得新版本。
However....the的方式,你是混合的图像不是很棒。尽管它可能适用于您,但它需要定义得稍差的$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%不等。
https://stackoverflow.com/questions/23640807
复制相似问题