将imagemagick命令行更改为php imagick

将imagemagick命令行更改为php imagick,php,imagemagick,imagick,Php,Imagemagick,Imagick,出于性能原因(通过php执行的exec有时非常慢),我正在将大部分imagemagick命令转换为php的imagick 我在这里阅读了关于-channel和-level的文档: 和 特别是关于黑色、白色和伽马值: 给定一个、两个或三个用逗号分隔的值:黑点、白点、伽马(例如:10250,1.0或2%、98%、0.5)。黑点和白点的范围从0到量程,或从0到100%;如果省略了白点,则将其设置为(QuantumRange-black_point),以便中心对比度变化。如果字符串中的任何位置都有%符

出于性能原因(通过php执行的exec有时非常慢),我正在将大部分imagemagick命令转换为php的imagick

我在这里阅读了关于-channel和-level的文档: 和

特别是关于黑色、白色和伽马值:

给定一个、两个或三个用逗号分隔的值:黑点、白点、伽马(例如:10250,1.0或2%、98%、0.5)。黑点和白点的范围从0到量程,或从0到100%;如果省略了白点,则将其设置为(QuantumRange-black_point),以便中心对比度变化。如果字符串中的任何位置都有%符号,则黑点和白点都是整个颜色范围的百分比。Gamma将对值进行-Gamma调整。如果省略,则假定默认值为1.0(无伽马校正)

在正常使用(-level)中,图像值会被拉伸,以便原始图像中给定的“黑色点”值设置为零(或黑色),而给定的“白色点”值设置为QuantumRange(或白色)。这为您提供了对图像的直接对比度调整。然后将调整生成图像的“gamma”

基于此,我试图改变

convert a.jpg -channel R -level 33% -channel G -level 33% b.jpg


但是结果看起来确实很不一样……有没有专家能指出imagick是如何执行其频道级别的?

我在我的计算机上试用过,PHP和命令行版本非常相似:


原创的


命令行


PHP

我看不出你的脚本有什么问题,但你可以试试我的,看看它是否有不同的效果

$image = new Imagick();
$quantum_range = $image->getQuantumRange();
$max_quantum = $quantum_range["quantumRangeLong"];
$image->readImage("rose.jpg");
$black_point = $max_quantum * .33;
$white_point = $max_quantum - $black_point;
$gamma = 1.0;
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_RED);
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_GREEN);
header("Content-type: image/jpeg");
echo $image;
$image->writeImage("php.jpg");
如果它仍然不工作,以下是我的ImageMagick版本和PHP的ImageMagick模块:

$convert-版本
版本:ImageMagick 6.7.9-10 2012-10-10 Q16http://www.imagemagick.org
数组([versionNumber]=>1632
[versionString]=>ImageMagick 6.6.0-4 2012-05-03 Q16
http://www.imagemagick.org )

好的,我不知道那里出了什么问题,但它现在似乎起作用了……快把我逼疯了!谢谢你检查这个!
$image = new Imagick();
$quantum_range = $image->getQuantumRange();
$max_quantum = $quantum_range["quantumRangeLong"];
$image->readImage("rose.jpg");
$black_point = $max_quantum * .33;
$white_point = $max_quantum - $black_point;
$gamma = 1.0;
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_RED);
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_GREEN);
header("Content-type: image/jpeg");
echo $image;
$image->writeImage("php.jpg");