有没有办法将ImageMagick传递给RGBA数组以将其渲染为图像?

时间:2012-09-13 21:51:06

标签: imagemagick imagemagick-convert

问题几乎说明了一切。

这个想法是生成程序PNG。我知道imageMagick的'-fx'操作符,但它很慢。

解决方法可能是将我的数组保存到.bmp(这几乎只是保存它)然后只使用ImageMagick将.bmp转换为.png,但是有一个更直接的方法会很好。

1 个答案:

答案 0 :(得分:2)

您可以为此目的利用ImageMagick的TXT图像格式。我无法告诉你关于性能的任何信息,你必须对它进行测试。

首先尝试以下方法:

convert  some-small.png  some-small-png.txt
convert  some-small.jpg  some-small-jpg.txt
convert  some-small.tif  some-small-tif.txt
[...]

(这种转换也可能很慢。)

然后进行反向转换:

convert  some-small-png.txt  some-small-roundtripped.png
convert  some-small-png.txt  some-small-roundtripped.jpg
convert  some-small-png.txt  some-small-roundtripped.tif
[...]

(此转换应该更快。)

将初始PNG,JPEG,TIFF与往返的那些进行比较。

查看* .txt文件以了解其格式:

  • 这是一个正式的文本描述,逐行枚举每个像素的坐标和相应的颜色值。
  • 第一行是描述图像尺寸,深度和使用的色彩空间的标题。
  • 另请注意,在每一行上,#(描述相应颜色的十六进制值)之后的所有内容都不是必需的 - 您可以将其视为注释。此外,每行的所有剩余空白都是可选的。

这意味着您可以重新组织RGBA数组,使其与ImageMagick的TXT图像格式匹配(正如我所说,您既不需要十六进制值也不需要友好的颜色名称),然后只需调用{{ 1}}(在添加所需的标题行之后)。


更新

我会举个例子。

这是极简单的,剥离的空白,名称和#hex值的颜色,2x2像素sRGBA迷你图像由convert表示。它的文件大小是129字节。

cat 2x2.txt
 # ImageMagick pixel enumeration: 2,2,65535,srgba
 0,0:(65535,0,0,65535)
 0,1:(0,65535,0,65535)
 1,0:(0,0,65535,65535)
 1,1:(0,0,0,0)

您将其转换为PNG图像:

2x2.txt

convert 2x2.txt 2x2.png 是293字节。由于2x2像素PNG太小而无法在网站上识别,我们可以转换为更大的东西:

2x2.png

这两个PNG可在网页上识别:

200x200.png 20x20.png

为了演示完整的格式(没有去除空白,名称或颜色的#hex值),让我们创建相应的20x20.txt并查看它:

convert  20x20.png  20x20.txt

cat 20x20.txt 
 # ImageMagick pixel enumeration: 20,20,255,srgba
 0,0: (255,  0,  0,255)  #FF0000  red
 1,0: (255,  0,  0,255)  #FF0000  red
 2,0: (255,  0,  0,255)  #FF0000  red
 3,0: (255,  0,  0,255)  #FF0000  red
 4,0: (255,  0,  0,255)  #FF0000  red
 5,0: (255,  0,  0,255)  #FF0000  red
 6,0: (255,  0,  0,255)  #FF0000  red
 7,0: (255,  0,  0,255)  #FF0000  red
 8,0: (255,  0,  0,255)  #FF0000  red
 9,0: (255,  0,  0,255)  #FF0000  red
 10,0: (  0,  0,255,255)  #0000FF  blue
 11,0: (  0,  0,255,255)  #0000FF  blue
     [....]
     [....]
     [....]
 7,19: (  0,255,  0,255)  #00FF00  lime
 8,19: (  0,255,  0,255)  #00FF00  lime
 9,19: (  0,255,  0,255)  #00FF00  lime
 10,19: (  0,  0,  0,  0)  #00000000  none
 11,19: (  0,  0,  0,  0)  #00000000  none
 12,19: (  0,  0,  0,  0)  #00000000  none
 13,19: (  0,  0,  0,  0)  #00000000  none
 14,19: (  0,  0,  0,  0)  #00000000  none
 15,19: (  0,  0,  0,  0)  #00000000  none
 16,19: (  0,  0,  0,  0)  #00000000  none
 17,19: (  0,  0,  0,  0)  #00000000  none
 18,19: (  0,  0,  0,  0)  #00000000  none
 19,19: (  0,  0,  0,  0)  #00000000  none