3

问题几乎说明了一切。

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

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

4

1 回答 1

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 图像格式匹配(正如我所说,您既不需要十六进制值也不需要友好的颜色名称),然后只需调用convert(在添加所需的标题行)。


更新

我给你举个例子。

这是极其简单的,去掉了空格、名称和颜色的#hex 值,2x2 像素 sRGBA 迷你图像由2x2.txt. 它的文件大小为 129 字节。

猫 2x2.txt
 # ImageMagick 像素枚举: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 图像:

convert  2x2.txt  2x2.png

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

convert 2x2.txt  -scale 10000%  200x200.png
convert 2x2.txt  -scale 1000%   20x20.png

这 2 个 PNG 在网页上是可识别的:

200x200.png   20x20.png

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

转换 20x20.png 20x20.txt

猫 20x20.txt
 # ImageMagick 像素枚举:20,20,255,srgba
 0,0: (255, 0, 0,255) #FF0000 红色
 1,0: (255, 0, 0,255) #FF0000 红色
 2,0: (255, 0, 0,255) #FF0000 红色
 3,0: (255, 0, 0,255) #FF0000 红色
 4,0: (255, 0, 0,255) #FF0000 红色
 5,0: (255, 0, 0,255) #FF0000 红色
 6,0: (255, 0, 0,255) #FF0000 红色
 7,0: (255, 0, 0,255) #FF0000 红色
 8,0: (255, 0, 0,255) #FF0000 红色
 9,0: (255, 0, 0,255) #FF0000 红色
 10,0: ( 0, 0,255,255) #0000FF 蓝色
 11,0: ( 0, 0,255,255) #0000FF 蓝色
     [……]
     [……]
     [……]
 7,19: ( 0,255, 0,255) #00FF00 石灰
 8,19: ( 0,255, 0,255) #00FF00 石灰
 9,19: ( 0,255, 0,255) #00FF00 石灰
 10,19: ( 0, 0, 0, 0) #00000000 无
 11,19: ( 0, 0, 0, 0) #00000000 无
 12,19: ( 0, 0, 0, 0) #00000000 无
 13,19: ( 0, 0, 0, 0) #00000000 无
 14,19: ( 0, 0, 0, 0) #00000000 无
 15,19: ( 0, 0, 0, 0) #00000000 无
 16,19: ( 0, 0, 0, 0) #00000000 无
 17,19: ( 0, 0, 0, 0) #00000000 无
 18,19: ( 0, 0, 0, 0) #00000000 无
 19,19: ( 0, 0, 0, 0) #00000000 无
 
于 2012-09-14T03:03:59.393 回答