【问题标题】:How do I convert a text file of RGB values into a png file?如何将 RGB 值的文本文件转换为 png 文件?
【发布时间】:2018-03-19 00:47:57
【问题描述】:

问题陈述:

使用 ImageMagick,我可以做到:

convert a.png a.txt

这给了我:

# ImageMagick pixel enumeration: 297,239,255,srgba
0,0: (255,255,255,1)  #FFFFFF  white
1,0: (255,255,255,1)  #FFFFFF  white
2,0: (255,255,255,1)  #FFFFFF  white
3,0: (255,255,255,1)  #FFFFFF  white
...

我还希望能够从文本文件返回到 png。我怎样才能做到这一点?我很乐意使用任何 linux 命令行工具、编程语言库等。

上下文:

我已使用 ImageMagick 工具将原始图像的像素值解析为 q(我正在使用的语言)。然后我对它们进行了转换,现在想要保存与新像素值对应的图像。使用 q 我可以轻松地将 rgb 值保存为所需的任何文本格式。

【问题讨论】:

  • 你能贴出你到目前为止所做的代码吗?
  • 只是为了澄清这一点,即使在事实发生后 - 我真的不可能编写任何代码来开始解决我没有知识解决的问题......

标签: image parsing colors imagemagick png


【解决方案1】:

两种方式都一样:

# Image to text
convert image.png image.txt

# Text to image
convert image.txt andBack.png

最好还是写一个 NetPBM 文件——所以如果是灰度则为PGM (P5),如果是彩色则为PPM (P6)。格式很简单,描述here

有几种变体,称为 P1 到 P6。 P1 很少使用,只是单声道且效率低下。 P2 是灰度和 ASCII(人类可读),P5 是相同的,但是是二进制的,因此更紧凑。 P3 是彩色和 ASCII(人类可读),P6 是相同的,但都是二进制的,因此更紧凑。

这是一个 4x4 白色 (255) 矩形,带有 1 像素宽的中灰色 (127) 边框,​​形成 6x6 PGM

P2
6 6
255
127 127 127 127 127 127 
127 255 255 255 255 127 
127 255 255 255 255 127 
127 255 255 255 255 127 
127 255 255 255 255 127 
127 127 127 127 127 127

这是一种颜色PPM,对应于 3x1 行 RGB 像素:

P3
3 1
255
255 0 0
0 255 0
0 0 255

然后您可以使用 ImageMagick

将其转换回 PNG
convert image.ppm image.png
convert image.pgm image.png

您也可以按 RGB、RGB、RGB 的顺序将原始二进制字节写入文件,然后使用 ImageMagick 将其转换为 PNG,如下所示:

convert -size 1024x768 RGB:data.bin image.png

或灰度:

convert -size 1024x768 GRAY:data.bin image.png

虽然它会稍微小一些,但它不再像 PGM/PPM 文件那样独立,这意味着您必须单独携带大小才能取回数据,所以我会选择 PGM /PPM 版本为了 3 小行标题。


请注意,您还可以使用更轻量级的 NetPBM 工具(或 libvipsGIMP 或其他工具)在 NetPBM 和 PNG 格式之间进行上述所有转换) 而不是 ImageMagick

例如,使用 NetPBM,将PPM 转换为PNG

pnmtopng a.ppm > result.png

【讨论】:

  • 不用说,但我建议您生成和解析 NetPBM 文件作为程序的输入,而不是 ImageMagick 特定的文本格式...
猜你喜欢
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多