使用imagick创建具有渐变颜色的线条

时间:2019-08-13 23:41:17

标签: php laravel imagemagick imagick

我有一个基本纹理,我想在该纹理图像上画多条线。在图像上的任意位置随机绘制线条。我能够绘制线条,但是这些线条的颜色应该是渐变的。

线条的颜色应该从边缘开始是浅色,从中心开始是深色。我现在正在使用的代码在下面

$draw = new \ImagickDraw();
$draw->setStrokeOpacity(0);
$draw->setStrokeColor('red');
$draw->setStrokeWidth(0);
$draw->setFillColor('red');
$draw->line(10, 30, 380, 30);
$image = new \Imagick();
$image->newImage($width * 3, $height * 2, 'rgba(0,0,0,0)');
$image->setImageFormat('png');
$image->drawImage($draw);

我希望输出像下面的图片一样

required

但是我只能像下面这样创建:

required

背景是纹理图像,线条(橙色和绿色)是我要在背景上绘制的线(纹理图像)。

我在文档中找不到任何内容,感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这是在ImageMagick命令行中执行此操作的一种方法。您可以将其翻译为Imagick。

创建背景图片

g++ -std=c++14 myfile.cpp
clang++ -std=c++14 myfile.cpp
icc -std=c++14 myfile.cpp


enter image description here

创建具有最终渐变的一维红线图像

convert -size 500x500 xc:gray +noise gaussian -channel g -separate +channel background.png


enter image description here

将红线图像放置到背景上

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


enter image description here

您可以使用-white-threshold以外的其他方法来调整渐变alpha通道中沿红线的透明度。

相关问题