有没有办法向ImageMagick传递RGBA数组以将其渲染为图像?
这个问题几乎说明了一切 其思想是生成程序性PNG。我知道imageMagick的“-fx”操作符,但速度非常慢有没有办法向ImageMagick传递RGBA数组以将其渲染为图像?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,这个问题几乎说明了一切 其思想是生成程序性PNG。我知道imageMagick的“-fx”操作符,但速度非常慢 一种解决方法是将我的数组保存到.bmp(基本上就是保存它),然后使用ImageMagick将.bmp转换为.png,但最好采用更直接的方法。您可以利用ImageMagick的TXT图像格式实现此目的。我不能告诉你关于性能的任何事情,你必须测试一下 首先尝试以下操作: convert some-small.png some-small-png.txt convert some-sm
一种解决方法是将我的数组保存到.bmp(基本上就是保存它),然后使用ImageMagick将.bmp转换为.png,但最好采用更直接的方法。您可以利用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文件以了解其格式:
- 它是一种正式的文本描述,逐行枚举每个像素的坐标和各自的颜色值李>
- 第一行是描述图像尺寸、深度和使用的颜色空间的标题
- 还要注意的是,在每一行上,
后面的所有内容(描述各自颜色的十六进制值)都不是必需的,您可以将其视为注释。此外,每行上的所有剩余空格都是可选的#
convert
(添加所需的标题行后)
更新 我给你举个例子 这是一个极其简单的、没有空格、名称和颜色的#十六进制值的、2x2像素的sRGBA迷你图像,由
2x2.txt
表示。它的文件大小是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)
2x2.png
为293字节。由于2x2像素的PNG有点太小,无法在网站上识别,我们可以转换为更大的:
convert 2x2.txt -scale 10000% 200x200.png
convert 2x2.txt -scale 1000% 20x20.png
这两个PNG可在网页上识别:
为了演示完整格式(不包括空格、名称或颜色的#十六进制值),让我们创建相应的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
转换20x20.png 20x20.txt
cat 20x20.txt
#ImageMagick像素计数:20,20255,srgba
0,0:(255,0,0255)#FF0000红色
1,0:(255,0,0255)#FF0000红色
2,0:(255,0,0255)#FF0000红色
3,0:(255,0,0255)#FF0000红色
4,0:(255,0,0255)#FF0000红色
5,0:(255,0,0255)#FF0000红色
6,0:(255,0,0255)#FF0000红色
7,0:(255,0,0255)#FF0000红色
8,0:(255,0,0255)#FF0000红色
9,0:(255,0,0255)#FF0000红色
10,0:(0,0255255)#0000FF蓝色
11,0:(0,0255255)#0000FF蓝色
[....]
[....]
[....]
7,19:(02550255)#00FF00石灰
8,19:(02550255)#00FF00石灰
9,19:(02550255)#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无
回答得很好,谢谢。事实上,我已经习惯于使用rgba格式,阅读STDIN中的所有内容;因此,我调用了一个用C编写的程序,该程序输出字节,然后通过管道将它们传输到
convert-size WxH rgba:-output.ext
。我以这种方式实现了一些模糊过滤器,我很惊讶它们比imageMagick中运行模糊过滤器的速度快(10倍)。
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