我有这个bash脚本,将绘图信息提供给ImageMagick,它开始如下:
#!/bin/bash
convert -size 2200x2200 xc:white \
-fill '#FFFEFF' -draw 'point 1112,1111' \
-fill '#FFFEFE' -draw 'point 1112,1112' \
-fill '#FFFEFE' -draw 'point 1111,1112' \
-fill '#FFFEFE' -draw 'point 1110,1112' \
-fill '#FFFEFE' -draw 'point 1110,1111' \
******ON & ON 4.2 MILLION LINES MORE*******
spectrumspiral.png;
我的问题是我不断收到有关参数列表的警告,终端说'杀',警告'分叉:无法分配内存等。
我尝试将ulimit -s
调整到更高的值,但无济于事。真想拍这张照片。知道我怎么能一次提供这个脚本的终端块吗?或者为此目的。
我听说xargs可以用于这样的事情,但是我找不到符合这个问题性质的特定实现。
答案 0 :(得分:1)
尝试使用shell的here-document
#!/bin/bash
convert - <<EOS spectrumspiral.png
-size 2200x2200 xc:white
-fill '#FFFEFF' -draw point '1112,1111'
-fill '#FFFEFE' -draw 'point 1112,1112'
-fill '#FFFEFE' -draw 'point 1111,1112'
-fill '#FFFEFE' -draw 'point 1110,1112'
-fill '#FFFEFE' -draw 'point 1110,1111'
# ******ON & ON 4.2 MILLION LINES MORE*****
EOS
我的系统没有convert
所以我可以测试一下这是否有效。
大多数linux程序(包括convert
)都可以接受来自StdIn的输入,它在上面的cmd-line中由-
char表示。 -
告诉命令期望输入,而不是文件,但好像是在键盘上输入,即StdIn。 <<EOS .... EOS
是here-doc,它表示在命令stdIn输入中将所有文本中的bash'键入'。
你可能需要也可能不需要所有引用,如果你已经有,我认为它不会受到伤害。如果这不起作用,请使用一个小的输入示例文件(如上所述)并测试各种场景,直到它为您创建文件。
IHTH
答案 1 :(得分:1)
如果您创建一个包含4个像素的图像(1个红色,1个白色,1个蓝色和1个黑色),您可以告诉ImageMagick将结果图像输出为文本文件,如下所示:
convert -size 1x1 xc:red xc:white xc:blue xc:black +append -depth 8 -colorspace RGB image.txt
# ImageMagick pixel enumeration: 4,1,255,rgb
0,0: (255,0,0) #FF0000 rgb(255,0,0)
1,0: (255,255,255) #FFFFFF rgb(255,255,255)
2,0: (0,0,255) #0000FF rgb(0,0,255)
3,0: (0,0,0) #000000 rgb(0,0,0)
出于同样的原因,如果您将该文本文件提供给ImageMagick,它可以重新创建图像:
cat image.txt | convert txt:- output.img
因此,我们需要做的就是将您的-fill
命令转换为ImageMagick喜欢的格式的文本文件。我们可以对yourFile
sed -E 's/.*(#[0-9A-F]+).* ([0-9]+)\,([0-9]+).*/\2,\3:\1/g' yourFile
我们会得到这样的东西:
0,0:#3C4AD8
0,1:#269531
0,2:#CF2C7C
...
...
然后我们可以将其导入awk
以重新排列ImageMagick喜欢它的方式:
awk -F: '
BEGIN{print "# ImageMagick pixel enumeration: 2200,2200,255,rgb"}
{
coords=$1;colour=$2
rh="0x" substr(colour,2,2);
gh="0x" substr(colour,4,2);
bh="0x" substr(colour,6,2);
r=strtonum(rh);
g=strtonum(gh);
b=strtonum(bh);
printf "%s: (%d,%d,%d) %s\n",coords,r,g,b,colour;
}'
因此,如果我们将所有这些放在一起,以下脚本应该能够将您心爱的图像创建到文件spectrumspiral.png
中:
#!/bin/bash
sed -E 's/.*(#[0-9A-F]+).* ([0-9]+)\,([0-9]+).*/\2,\3:\1/g' yourFile | awk -F: '
BEGIN{print "# ImageMagick pixel enumeration: 2200,2200,255,rgb"}
{
coords=$1;colour=$2
rh="0x" substr(colour,2,2);
gh="0x" substr(colour,4,2);
bh="0x" substr(colour,6,2);
r=strtonum(rh);
g=strtonum(gh);
b=strtonum(bh);
printf "%s: (%d,%d,%d) %s\n",coords,r,g,b,colour;
}' | convert txt:- spectrumspiral.png