使用rmagick或imagemagick

时间:2016-05-25 15:39:05

标签: ruby imagemagick rmagick

我正在使用Ruby从多个源图像生成动画GIF文件。我需要最大化吞吐量/最小化创建每个GIF所花费的时间。我更喜欢将源图像保存在内存中(可能是Memcached),而不是每次需要时都从光盘中读取它们。我一直在反引号中使用convert直接从Ruby执行imagemagick命令,例如。

`convert -delay #{delay} -page #{w}x#{h}+0+0 src01.gif... etc`

我稍微偏爱RMagick,因为我发现了更多示例,我可以直接引用ImageMagick文档。传递给convert命令的图像似乎需要是光盘上图像的路径。此外,似乎转换命令的输出是一个文件路径,因此生成的图像将由ImageMagick写入光盘,我需要使用Ruby将其从光盘读回来访问生成的图像数据。看起来我每次都让ImageMagick从光盘读取源图像,并且每次都将生成的GIF写入光盘。我认为这可能是一个瓶颈而且没有必要,因为我不需要保留生成的图像,我只需要暂时访问Ruby中的图像数据。

我注意到RMagick方法可以将Magick::Image s作为参数而不是文件路径。在这种情况下,我可以将源图像保留在内存中。另外RMagick将生成的图像作为数据返回给Ruby,这是我需要的,我不需要将它写入光盘。

我正在考虑使用RMagick而不是

`convert...`

减少光盘活动。

问题1:这有意义吗?由于RMagick可能包含了ImageMagick,因此RMagick实际上是在读取和写入光盘下的光盘,还是有一些方法可以在没有光盘活动的情况下使用ImageMagick?

问题2:有没有办法在没有光盘活动的情况下将图像数据输入和输出ImageMagick的转换命令?

希望这是有道理的。如果我不清楚,只是试图绕过这个并道歉。

1 个答案:

答案 0 :(得分:1)

  

这有意义吗?

不是真的。我们可以争论开放的fd,以及shell环境相对于直接API的成本,但转换实用程序和实用程序之间不存在任何磁盘I / O好处。 RMagick。

  

有没有办法在没有光盘活动的情况下将图像数据输入和输出ImageMagick的转换命令?

ImageMagick附带stream实用程序。使用文档不多,但可以利用它将图像数据提取到可以通过memcached分发的blob。

还有mpr:协议来处理基于标签的内存访问,但这可能不是您要查找的分布式解决方案。在处理完成时删除数据。

就个人而言,Marks对RAMdisk的评论将是我推荐的。一个简单的内存/ tmpfs挂载很容易在系统上进行设置,然后只需要更新policy.xml配置就可以将所述挂载用作临时目录。