使用PHP中的ImageMagick倾斜移动图像

时间:2012-06-19 19:28:50

标签: php imagemagick imagick

我有一个命令可以在命令行上运行,使用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);

谢谢!

3 个答案:

答案 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.h88下的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。