如何用imagemagick产生这种效果

时间:2018-09-21 13:54:51

标签: imagemagick imagemagick-convert

背景图片: background

最终效果: gif effect

如何使红色心脏移动并覆盖背景文字?

我已经尝试过了:

转换back.png(-clone1-重心-geometry + 10 + 10 heart.png)(-clone 1 *******)

这只是移动心脏,但没有覆盖文字。

如何使红色心脏移动并掩盖背景文本的一部分?

戴着口罩?

1 个答案:

答案 0 :(得分:0)

这是使用Imagemagick的一种方法。首先,我需要从您的一个动画帧中裁剪出心形,因为您没有提供它。

心脏图片:

enter image description here

背景图片:

enter image description here

首先,我在桌面上创建一个名为test的新文件夹,并将两个图像都放入其中。

这是(Bash)Unix语法中的代码。

我从背景的右侧向左侧开始倒退。然后使用j =(55-i)反转i索引,以便以后按字母顺序组合。 jj计算会为小于10的索引添加前导零,以便所有帧以字母顺序列出在测试文件夹中。

对于每帧,它提取背景的Alpha通道并在右侧绘制一个黑色矩形,然后使用-compose copy_opacity -composite将结果放回到背景图像的Alpha通道中。这可以有效地使透明字母位于透明位置。然后,将心脏图像合成为绘制黑色矩形的相应左边缘。

循环结束后,我从测试目录中收集所有以tmp_开头的帧,并创建一个gif动画,并将其写入桌面。

x=564
for ((i=0; i<56; i++)); do
j=$((55-i))
jj=`printf "%02d\n" $j`
convert background.png \
\( -clone 0 -alpha extract -fill black -draw "rectangle $x,0 639,123" \) \
-alpha off -compose copy_opacity -composite \
heartshape.png -geometry +${x}+28 -compose over -composite tmp_$jj.gif 
x=$((x-8))
done
convert -dispose background -delay 10 tmp_*.gif -loop 0 ../heart_animation.gif


enter image description here

请注意,Windows Imagemagick和脚本语法是不同的。如果某种Windows用户想要发布转换,那就太好了。