出于性能原因(通过 php 执行的速度有时非常慢),我将大部分 imagemagick 命令转换为 php 的 imagick。
我在这里阅读了关于 -channel 和 -level 的文档: http ://www.imagemagick.org/script/command-line-options.php#channel 和 http://www.imagemagick.org/script/command-line- options.php#level
特别是关于黑色、白色和伽马值:
给定一个、两个或三个用逗号分隔的值:黑点、白点、伽玛(例如:10,250,1.0 或 2%,98%,0.5)。黑白点范围从 0 到 QuantumRange,或从 0 到 100%;如果省略白点,则将其设置为 (QuantumRange - black_point),以使对比度变化居中。如果字符串中的任何位置出现 % 符号,则黑点和白点都是整个颜色范围的百分比。Gamma 将对值进行 -gamma 调整。如果省略,则假定默认值为 1.0(无伽马校正)。
在正常使用 (-level) 中,图像值被拉伸,使得原始图像中给定的“black_point”值设置为零(或黑色),而给定的“white_point”值设置为 QuantumRange(或白色)。这为您提供了对图像的直接对比度调整。然后将调整生成图像的“伽玛”。
基于此,我试图改变
convert a.jpg -channel R -level 33% -channel G -level 33% b.jpg
至
$quantumRange = $image->getQuantumRange();
//get the 33%
$blackPoint = $quantumRange ['quantumRangeLong']/100*33;
//to get the middle ground between black and white - also tried with $quantumRange['quantumRangeLong']
$whitePoint = $quantumRange ['quantumRangeLong'] - $blackPoint;
$gamma = 1;
$image->levelImage ( $blackPoint , $gamma , $whitePoint , Imagick::CHANNEL_RED);
$image->levelImage ( $blackPoint , $gamma , $whitePoint , Imagick::CHANNEL_GREEN);
但结果看起来确实完全不同......那里有任何专家可以指出imagick如何执行其频道级别?