【发布时间】:2019-12-20 14:46:12
【问题描述】:
我需要将 ImageMagick 命令转换为 PHP Imagick。我尝试了一些组合,但没有按预期工作。该命令创建一条带有尖边和边缘渐变的线 命令是:
convert -size 300x1 xc:red \
\( -size 1x300 gradient: -rotate 90 -solarize 50% -level 0x50% -white-threshold 50% +write grad.png \) \
-alpha off -compose copy_opacity -composite red_grad.png`
感谢@fmw42 提供此命令
我已经尝试了以下代码:
$line = new Imagick();
$line->newPseudoImage(300,1,'xc:red');
$shadow = new Imagick();
$shadow->newPseudoImage(1, 300, 'gradient:red-white');
$shadow->rotateImage('transparent', 90);
$shadow->solarizeImage(50);
$shadow->levelImage(0,50,50);
$shadow->whiteThresholdImage('white');
$shadow->setImageCompose(0);
$shadow->writeImage('grad.png');
$shadow->compositeImage($line, Imagick::COMPOSITE_MATHEMATICS, 0, 0);
请指出我哪里错了
【问题讨论】:
-
为什么要创建红白渐变?在我的代码中,它是黑白的。然后我晒太阳。使用 levelImage (0, 1.0, 65535/2)。 Gamma 值应为 1。Imagick 不使用百分比,而是使用 0 到 65535(量子范围)范围内的值来表示黑点和白点。日晒渐变使用 copy_opacity 的合成进入红线的 alpha 通道,而不是数学。我不太了解 Imagick,但为什么需要两套新的 Imagick。我想你只需要一个。
-
还要注意,solarize 值应该是 50*quantumrange/100,因为对于 Q16 ImageMagick,它需要在 0 到 65535 的范围内。此外,白色阈值不是颜色,而是同一范围内的值。因此,对于我的 50%,它将是 50*quantumrange/100。请更仔细地阅读 Imagick 文档并查看每页底部的注释/cmets,并参考它们上有关参数的链接。
-
更正,您需要两个新的 Imagick 命令。
-
在下面查看我的答案。
-
稍作调整,您的答案就奏效了。谢谢
标签: php imagemagick imagick