尝试使用Imagemagick将RGB图像转换为十六进制代码列表,每个代码对应一个像素

时间:2017-05-13 21:44:39

标签: bash imagemagick imagemagick-convert

正如标题所述,我试图创建一个读取图像的脚本,与分辨率无关,并将图像转换为十六进制代码列表。例如,具有交替的白色和黑色像素的8x8 PNG图像将转换为:

FFFFFF
000000
FFFFFF
000000
FFFFFF
000000

等等。到目前为止,我已尝试过以下内容:

convert $name.png -compress none pnm:-

但是,上面的代码只返回常规数字而不是十六进制值。这是一个例子:

205 0 0 205 0 0 205 0 0 205 0 0 205 0 0 205 0 0 224 160 0 224 160 0 224 160 0 

这里出了什么问题,我将对其进行哪些更改以使其输出十六进制代码?

2 个答案:

答案 0 :(得分:2)

您可以使用 ImageMagick 将文件解码为原始RGB值,并使用 xxd 对其进行分组并以十六进制显示:

convert yourImage.png rgb:- | xxd -g3

我使用-g3分组为RGB文件,如果有alpha /透明层:

convert yourImage.png rgba:- | xxd -g4

您可能希望与xxd一起使用的其他开关是:

xxd -g3 -c15    # 15 bytes per line, good if you have 5 pixels of 3 bytes each, so hex lines match image scanlines

xxd -ps         # continuous output without offsets at start of lines

答案 1 :(得分:1)

这对我有用:

convert yourimage.png txt:- | tail -n +2 | sed -n 's/^.*#\([0-9A-Fa-f]*\).*$/\1/p'

请参阅http://www.imagemagick.org/Usage/files/#txt