スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Rubyで画像情報の取得とリサイズ

Rubyで画像のフォーマットとサイズを取得して、リサイズしたくなりました。
RMagckを使えばできるんですが、面白くないし重そうなんで他の探してみたところVIPSというRMagickよりも早いのを自慢しているのがあったのでこれを使ってみました。

残念ながらフォーマットの取得だけはできなかったので8バイトなめて判定する関数を作りました。
require 'ruby-vips'

def get_type(bytes)
case bytes
when Regexp.new("^\x89PNG\x0d\x0a\x1a\x0a", nil, 'n')
'png'
when Regexp.new("^GIF8[79]a", nil, 'n')
'gif'
when Regexp.new("^\xff\xd8", nil, 'n')
'jpeg'
when Regexp.new("^BM", nil, 'n')
'bmp'
end
end

f = open('/tmp/test.png')
im = VIPS::Image.new(f.path, :shrink_factor => 4)
im.shrink(2).jpeg('/tmp/test.jpg')
p im.x_size.to_s + "," + im.y_size.to_s + "," + get_type(f.read(8))

試してみたところ、いくつか注意点がありました。
1. Ubuntu13.10でaptitudeでインストールしたlibvipsでは、圧縮した画像が壊れる。最新版をソースでインストールしたらうまくいきました。
2. GIFファイルは未サポート

とりあえず自分は今回GIFは使わないので、このライブラリを使ってみようかと思いました。
使うときは、使いたい機能をチェックしてみるのがよさそうです。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。