JRubyからImageIOで画像を触ってみる

JRubyならJavaAPIが扱えるのでImageIOを使うと簡単に読み書きできると思います。

JPGからPNGに変換する

require 'java'
import 'javax.imageio.ImageIO'
import 'java.io.FileInputStream'
import 'java.io.FileOutputStream'

def read_image name
  file = FileInputStream.new name
  @img = ImageIO::read(file)
end

def write_image name
  file = FileOutputStream.new name
  ext = File.extname(name).delete('.')
  ImageIO::write(@img, ext, file)
end

begin
  read_image 'top_image.jpg'
  write_image 'rename.png'
rescue => e
  puts e.message
end

ここで、@imgは、BufferedImageクラスとなるようです。
なので、
@img.width
@img.height
なんかが使えたりします。

サポートする画像フォーマットは、以下で取得できます。

p ImageIO::reader_format_names.to_a
p ImageIO::writer_format_names.to_a

#["jpg", "BMP", "bmp", "JPG", "jpeg", "wbmp", "png", "PNG", "JPEG", "WBMP", "GIF", "gif"]
#["jpg", "BMP", "bmp", "JPG", "jpeg", "wbmp", "png", "PNG", "JPEG", "WBMP", "GIF", "gif"]