2

我有一个可以在命令行上运行的命令,以使用 Imagemagick 倾斜移动图像:

转换 \( 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 选项:compose:args 5 -composite myimage.jpg

我希望能够使用 PHP 的 imagemagick 库重现此命令的效果。该命令的第一部分很容易重现,但我无法弄清楚 sparse-color 及其后面的参数。到目前为止,我有:

$image = new imagick("myimage.jpg") 
$image->gammaImage(0.75);
$图像->调制图像(100,130,100);
$图像->对比度图像(1);

谢谢!

4

3 回答 3

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 行

于 2012-06-19T20:17:53.057 回答
1

我对 ImageMagick 没有丰富的经验,但我相信有一个与稀疏颜色重心等效的功能,可以在此处的文档中找到。

它应该看起来像:

$image -> sparseColorImage(int SPARSECOLORMETHOD_BARYCENTRIC (integer), 
                           array $arguments [, int $channel = CHANNEL_DEFAULT ])

可以在此处找到 FUNCTION_POLYNOMIAL 和其他方法常量/通道常量以供将来参考!

高斯模糊通过添加处理:

$image -> gaussianBlurImage ( float $radius , 
                              float $sigma [, int $channel = CHANNEL_ALL ] )

当然,这些都是非常通用的,但您可以随意使用以获得您想要的外观和感觉。

希望这可以帮助!

石匠

于 2012-06-19T20:05:59.187 回答
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在线下的 ImageMagick 源代码找到了它88

此代码完成您正在寻找的内容:

$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:args10或其他内容。我发现的一件事是,我必须在创建/加载任何东西到魔杖本身之前设置选项。

我无法让SparseColorImage()函数像在命令行上那样运行,尽管我确信如果其他人弄明白了,他们可以贡献那部分。以上满足我的需求。

编辑:在进一步检查生成的图像后,我注意到即使是模糊贴图的黑色部分也被模糊了。经过一番搜索,这似乎源于 ImageMagick 中引入的错误。我切换到版本 6.7.8-1 2012-07-05 Q16,现在模糊贴图似乎可以正常工作。如果您发现模糊合成出现不必要的模糊,我建议您升级您的 ImageMagick。

于 2012-07-05T17:09:46.957 回答