我有一个命令可以在命令行上运行,使用Imagemagick来倾斜移位图像:
convert \( myimage.jpg -gamma 0.75 -modulate 100,130 -contrast \) \( +clone -sparse-color Barycentric "0,0 black 0,%h white" -function polynomial 4,-4,1 -level 0,50% \) -compose blur -set option:compose:args 5 -composite myimage.jpg
我希望能够使用PHP的imagemagick库重现此命令的效果。该命令的第一部分很容易重现,但我在查找稀疏颜色及其后的参数时遇到了麻烦。到目前为止,我有:
$image = new imagick("myimage.jpg")
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);
谢谢!
答案 0 :(得分:2)
祝你好运Vijay - 我建议你坚持使用exec()
无论如何只是试一试,我的代码在下面;你可以看到我做出的一些改变并放弃了错误:$ new-> functionImage(FUNCTION_POLYNOMIAL,$ functionImagearray);
// Did not like the %h
// $sparseColorarray = array( 0, 0, black, 0, %h, white );
$sparseColorarray = array( 0, 0, black, 0, 20, white );
$functionImagearray = array( 4, -4, 1 );
$image = new imagick("output3.jpg");
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);
//$new = $image->clone();
$new = clone $image;
$new->sparseColorImage( Imagick::SPARSECOLORMETHOD_BARYCENTRIC, $sparseColorarray );
$new->functionImage ( Imagick::FUNCTION_POLYNOMIAL, $functionImagearray );
// Did not like the %
// $new->levelImage( 0, 50% );
$new->levelImage( 0, 50 );
// Can not find any options for this blur
$image->setImageCompose ( BLUR );
$image->setOption( args, 5);
$image->compositeImage( $new, COMPOSITE_BLEND, 0, 0 );
$image->writeImage( "tilt.jpg" );
$image->destroy();
阅读文档并遵循您的示例代码,这就是我想到的。我也找不到任何关于$ image-> setImageCompose(BLUR)的选项;
看看你是否能让它发挥作用会很有趣。
刚刚发现我的Imagick版本是针对functionImage的旧版本
更改了$ new-> functionImage line
答案 1 :(得分:1)
我没有使用ImageMagick的丰富经验,但我相信有一个与稀疏颜色重心相当的功能可以在文档here中找到。
它应该类似于:
$image -> sparseColorImage(int SPARSECOLORMETHOD_BARYCENTRIC (integer),
array $arguments [, int $channel = CHANNEL_DEFAULT ])
可以找到FUNCTION_POLYNOMIAL和其他方法常量/通道常量here以供将来参考!
Gaussian Blurring通过添加:
来处理$image -> gaussianBlurImage ( float $radius ,
float $sigma [, int $channel = CHANNEL_ALL ] )
当然,这些都是非常通用的,但你可以乱搞来获得你想要的外观和感觉。
希望这有帮助!
梅森
答案 2 :(得分:0)
我假设你指的是这里的例子:
http://www.imagemagick.org/Usage/photos/
话虽如此,我一直试图用PHP Imagick完成同样的事情。我在Linux中使用PHP Imagick 3.0.1和ImageMagick 6.7.4-4 2012-01-09 Q16。
模糊复合模式似乎没有记录。我通过查看magick/composite.h
行88
下的ImageMagick来源找到了它。
此代码可以实现您的目标:
$im = new Imagick();
$im->readImageBlob(file_get_contents($src));
$qr = $im->getQuantumRange();
$qr = $qr['quantumRangeLong'];
$im->sigmoidalContrastImage(true, 10, $qr / 2, Imagick::CHANNEL_ALL);
$blurmap = new Imagick();
$blurmap->setOption('compose:args', '5');
$blurmap->newPseudoImage($im->getImageWidth(), $im->getImageHeight(), 'gradient:black-white');
$blurmap->functionImage(Imagick::FUNCTION_POLYNOMIAL, array(4.5, -4.5, 1));
$blurmap->levelImage(0, 1, $qr / 2);
$im->compositeImage($blurmap, 57, 0, 0);
$blurmap->destroy();
如果您需要更多模糊,只需将compose:args
更改为10
或其他内容即可。我想到的一件事是我必须在创建/加载任何东西之前设置选项。
我无法让SparseColorImage()
函数像在命令行上那样运行,尽管如果他们弄清楚的话,我确信其他人可以贡献那部分。以上就足以满足我的需求。
编辑:在对生成的图像进行进一步检查时,我注意到即使模糊地图的黑色部分也模糊不清。经过一些搜索后,看起来这源于ImageMagick中引入的错误。我切换到版本6.7.8-1 2012-07-05 Q16,模糊地图现在似乎正在工作。如果您发现模糊合成模糊不清,我建议您升级ImageMagick。