[Ruby]画像の種類や画像の高さ・幅を判定するライブラリの比較

比較するライブラリ



環境は以下のとおり


ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
fastimage (1.6.0)
image_size (1.2.0)

image_size の特徴


判定できる画像の種類が fastimageに比べて豊富
bmp, gif, jpeg, pbm, pcx, pgm, png, ppm, psd, swf, tiff, xbm, xpmに対応している


fastimageの特徴


URLベースでの画像の種類判定(画像ファイルがローカルにない場合)の速度が圧倒的に優れている


URLベースでの画像の種類判定の速度比較


比較方法: インターネット上にある約3Mbyteの画像ファイルの種類、幅、高さを取得する場合の速度を比較する
それぞれ10回施行


fastimageの場合


コードは以下のとおり


u = 'http://[dummy]'
Benchmark.bm do |x|
10.times do |i|
c = i + 1
x.report(c.to_s + ': ') do
image = FastImage.new(u)
size = image.size
t = {width: size[0], height: size[1], format: image.type}
end
end
end

実行結果は以下のとおり


       user     system      total        real
1: 0.000000 0.000000 0.000000 ( 0.297004)
2: 0.000000 0.000000 0.000000 ( 0.358163)
3: 0.000000 0.000000 0.000000 ( 0.243635)
4: 0.010000 0.000000 0.010000 ( 0.287591)
5: 0.000000 0.000000 0.000000 ( 0.263205)
6: 0.000000 0.000000 0.000000 ( 0.174859)
7: 0.000000 0.000000 0.000000 ( 0.203047)
8: 0.000000 0.000000 0.000000 ( 0.181509)
9: 0.000000 0.000000 0.000000 ( 0.449431)
10: 0.000000 0.000000 0.000000 ( 0.275340)

image_sizeの場合


コードは以下のとおり


u = 'http://[dummy]'
Benchmark.bm do |x|
10.times do |i|
c = i + 1
x.report(c.to_s + ': ') do
open(u, 'rb') do |fh|
image = ImageSize.new(fh)
t = {width: image.width, height: image.height, format: image.format}
end
end
end
end

実行結果は以下のとおり


       user     system      total        real
1: 0.030000 0.010000 0.040000 ( 3.511545)
2: 0.010000 0.010000 0.020000 ( 3.572351)
3: 0.010000 0.010000 0.020000 ( 2.763692)
4: 0.010000 0.010000 0.020000 ( 3.166722)
5: 0.010000 0.010000 0.020000 ( 2.351097)
6: 0.010000 0.010000 0.020000 ( 2.222788)
7: 0.010000 0.000000 0.010000 ( 2.250199)
8: 0.010000 0.010000 0.020000 ( 3.220647)
9: 0.010000 0.010000 0.020000 ( 1.741559)
10: 0.010000 0.010000 0.020000 ( 1.894703)

fastimageのほうが約10倍高速に動作した。
fastimageは URLベースの画像のサイズ、種類判定に特化しており、(もちろんローカルファイルもできるが)
image_sizeのように画像を一度バッファに読み込むという方法を取っていない様子。
指定されたURLのうち、判定に必要な部分のみを取得しているため、大きな画像等の場合にも高速に動作させることができるようだ

ローカルファイルの種類判定の比較


比較方法: ローカルに保存されている3Mbyteの画像ファイルの種類、幅、高さを取得する場合の速度を比較する
それぞれ100回を10セット施行


fastimage の場合


       user     system      total        real
1: 0.090000 0.020000 0.110000 ( 0.118538)
2: 0.090000 0.030000 0.120000 ( 0.113711)
3: 0.090000 0.030000 0.120000 ( 0.111441)
4: 0.070000 0.010000 0.080000 ( 0.094530)
5: 0.090000 0.020000 0.110000 ( 0.100164)
6: 0.080000 0.020000 0.100000 ( 0.097243)
7: 0.080000 0.020000 0.100000 ( 0.101400)
8: 0.080000 0.010000 0.090000 ( 0.094394)
9: 0.080000 0.020000 0.100000 ( 0.096102)
10: 0.070000 0.010000 0.080000 ( 0.093232)

image_size の場合


       user     system      total        real
1: 0.010000 0.010000 0.020000 ( 0.020095)
2: 0.010000 0.000000 0.010000 ( 0.024165)
3: 0.010000 0.010000 0.020000 ( 0.021007)
4: 0.020000 0.010000 0.030000 ( 0.020037)
5: 0.010000 0.010000 0.020000 ( 0.019447)
6: 0.010000 0.000000 0.010000 ( 0.016330)
7: 0.010000 0.010000 0.020000 ( 0.020655)
8: 0.010000 0.000000 0.010000 ( 0.016787)
9: 0.010000 0.010000 0.020000 ( 0.022311)
10: 0.010000 0.010000 0.020000 ( 0.019287)

image_sizeのほうが約5倍高速に動作した

利用するライブラリの選定の結論


インターネット上の画像の種類、サイズ判定をしたいのであれば、断然fastimageを利用すべき。
画像がローカルにある場合や、画像の種類がfastimageに対応していない場合はimage_sizeを利用する感じになる。

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