如何处理非图像对象上的RMagick泄漏?

时间:2011-03-08 01:39:50

标签: ruby imagemagick rmagick

所以我知道RMagick在Image个对象的所有地方泄漏,#destroy!释放了那个记忆。

但是,我正在编写一个迭代图像所有像素的脚本,我必须处理这样一个事实,即使RMagick的其他对象,包括Pixel,也会泄漏。

image = Magick::Image::read('/path/to/image.png')[0]
5.times do
  100000.times do
    image.pixel_color(0,0)
  end
  print "Check memory, then press enter";gets
end

运行并观察它在整个地方泄漏。只需读取像素。

如何在不泄漏的情况下迭代这些像素?我对RMagick解决方案,非RMagick解决方案,甚至非Ruby解决方案感兴趣(如果需要)(但我真的而不是)。


如果已经有一个针对此特定任务的工具,我无法找到搜索查询,这就是我正在做的事情:我有两个图像是通过在纯色背景上叠加RGBA图像生成的(在这种情况下,一个黑色和一个白色)。这个脚本做了一些简单的数学运算来检索原始图像,alpha透明度和所有。我找不到一个命令行工具来完成这个确切的工作,但是,再说一次,用一个简短的短语来表达它并不容易。

1 个答案:

答案 0 :(得分:0)

目前,我选择使用纯{Ruby}库ChunkyPNG来避免RMagick的泄密。我可能会在不久的将来将C扩展名OilyPNG添加到该设置中。

我暂时接受这个答案,因为它解决了我的特殊问题。但是,如果有人发现解决方案实际上解决了RMagick在非图像上的内存泄漏的核心问题,请将其发布:D谢谢!