[ruby-list:50921] RMagic でキャッシュリソースあふれを回避したいのですが

From: konami <konami@...>
Date: 2021-03-16 04:42:19 UTC
List: ruby-list #50921
いつもお世話になっています。表題の通りです。
大量のスキャンデータを処理するためにRMagickを使おうとして失敗してしまいました。

ソース:
require "rmagick"
parity = 0
Dir.glob("*jpeg").each do |jpg|
   /(\d*)\.j/ =~ jpg
   if $1.to_i % 2 == parity
     puts jpg
     img = Magick::Image.read(jpg)[0]
     img.rotate(180)
   end
end

ナンバリングされているファイルのうち偶数番のファイルを180度回転させようというものですが,
走らせると途中で止まります。

 > ./rotateImage.rb
Check0002.jpeg
(中略)
Check0010.jpeg
Traceback (most recent call last):
     3: from ../rotateImage.rb:4:in `<main>'
     2: from ../rotateImage.rb:4:in `each'
     1: from ../rotateImage.rb:8:in `block in <main>'
../rotateImage.rb:8:in `read': cache resources exhausted 
`Check0010.jpeg' @ error/cache.c/OpenPixelCache/4083 
(Magick::ImageMagickError)

このエラーは ImageMagick 
が設定している最大のキャッシュを使い切ってしまうということのようで,設定ファイルをいじって 
1 GiB に増やしましたが,解決にはなりませんでした。
https://blog.myanote.com/post/529

ファイルを処理したらメモリを開放する方法でもないのかと思ってRMagickのドキュメントを見たのですが,分かりませんでした。

https://rmagick.github.io/usage.html

せっかくRubyから使えるのなら利用したいのですが,何か方法はないものでしょうか。ヒントでもいただけると幸いでです。

小波秀雄

In This Thread

Prev Next