首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COMPOSITE_DISSOLVE不适用于PHP

COMPOSITE_DISSOLVE不适用于PHP
EN

Stack Overflow用户
提问于 2014-05-13 20:17:48
回答 1查看 389关注 0票数 0

我想从两幅图像中制作出具有褪色效果的混合图像。

这是我的PHP代码。

代码语言:javascript
复制
$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常数,它工作得很好。

我在终端机试过命令。

代码语言:javascript
复制
# composite -dissolve 50 2.jpg 1.jpg 3.jpg

它也很好用。

为什么COMPOSITE_DISSOLVE常量在PHP中不起作用?

请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-14 01:14:45

您确实应该弄清楚开发环境和服务器之间的区别。开发服务器上的ImageMagick版本很可能已经过时,除非您自己正在编译它,因为Centos包管理系统似乎需要很长时间才能获得新版本。

However....the的方式,你是混合的图像不是很棒。尽管它可能适用于您,但它需要定义得稍差的$img2->setOption('compose:args', '50');行。

一个更强大的技术是通过COMPOSITE_COPYOPACITY控制alpha通道。这使您完全控制图像是如何混合的。例如:

代码语言:javascript
复制
$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%不等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23640807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档