我正在做一些ASCII艺术的批处理,目前有一个生成艺术的C ++应用程序。然后我通过ImageMagick通过以下命令运行文本文件:
convert -font Courier \"label:@input.txt\" output.png
最后,我通过以下命令将.PNG
文件合并为一个动画GIF:
convert *.png -set delay 100 MOVIE.GIF
我想要做的是在第一步生成的#
标签文件中将所有*
字符设为绿色,所有.PNG
字符为红色等。我该怎么做?
此外,是否可以将第n个字符设置为特定颜色而不是使用上述图案?一个例子是在文本段落中绘制HSV谱或任意颜色模式。
谢谢。
答案 0 :(得分:2)
sed是你的朋友。我会解析文件以提取每个颜色通道,并调整-fill标志
cat > input.txt <<EOF
#############
# * * * * * #
#* * * * * *#
#############
this is black
EOF
cat input.txt | sed 's/[\#\*]/ /g' > input.black.txt
cat input.txt | sed 's/[^\#]/ /g' > input.green.txt
cat input.txt | sed 's/[^\*]/ /g' > input.red.txt
convert -background transparent -font Courier \
-fill black label:@input.black.txt \
-fill green label:@input.green.txt \
-fill red label:@input.red.txt \
-flatten output.png
我确定上面的例子可以简化为单行。有关第n个字符的sed替换,请参阅this answer。