環境: Max OS X Lion + Ruby 1.8.7 + ImageMagick 6.7.5
ディレクトリの中にある画像ファイルのサムネイルを生成するスクリプト thumbcre.rb の中身。
#!/usr/bin/env ruby
# ファイル名のリストを取得
def get_file_names(target_dir)
entries = Dir.entries(target_dir)
result = []
entries.each{|e|
# ディレクトリは不要
if e != '.' && e != '..'
path = target_dir + '/' + e
result.push(e) if FileTest.file?(path)
end
}
return result
end
# ImageMagick の convert コマンドでサムネイルを生成
def make_thumbnail(srcpath, dstpath)
# [0]はアニメーションGIFのときに最初の1枚目を使う指定
# 縦横比が変わっても気にしない。すべて150x150ピクセルのサムネイルを生成
command = "convert #{srcpath}[0] -resize 150x150! #{dstpath}"
if !system(command)
raise "ERROR: make_thumbnail"
end
end
if ARGV.length < 2
puts "Usage: ruby #{File.basename(__FILE__)} <src_dir> <dst_dir>"
exit
end
# 元画像置場
srcdir = ARGV[0]
# サムネイル画像置き場
dstdir = ARGV[1]
# 元ファイル一覧を取得
filenames = get_file_names(srcdir)
# サムネイル画像が無ければ生成する
filenames.each{|filename|
# 元のファイルがJPEGでもPNGでもJPEGのサムネイルを生成
srcpath = File.join(srcdir, filename)
dstpath = File.join(dstdir, File.basename(filename, '.*') + '.jpg')
# すでにサムネイルが存在するなら生成しない
if !FileTest.exist?(dstpath)
make_thumbnail(srcpath, dstpath)
end
}
src ディレクトリにある画像ファイルのサムネイルを dst ディレクトリに生成する。
$ ls -la ./src/
total 184
drwxr-xr-x 5 hoge staff 170 8 1 19:14 .
drwxr-xr-x 6 hoge staff 204 8 1 19:20 ..
-rw-r--r-- 1 hoge staff 83740 11 24 20:05 14957715.jpg
-rw-r--r-- 1 hoge staff 3854 7 31 20:02 a.b.c.png
-rw-r--r-- 1 hoge staff 2578 8 1 19:01 hello.gif
$ ls -la ./dst/
total 0
drwxr-xr-x 2 hoge staff 68 8 1 19:21 .
drwxr-xr-x 6 hoge staff 204 8 1 19:20 ..
$ ./thumbcre.rb ./src/ ./dst
$ ls -la ./dst
total 80
drwxr-xr-x 5 hoge staff 170 8 1 19:21 .
drwxr-xr-x 6 hoge staff 204 8 1 19:20 ..
-rw-r--r-- 1 hoge staff 17391 8 1 19:21 14957715.jpg
-rw-r--r-- 1 hoge staff 8330 8 1 19:21 a.b.c.jpg
-rw-r--r-- 1 hoge staff 6202 8 1 19:21 hello.jpg
ちなみに、ここでテストしたa.b.c.pngとhello.gifは生成したサムネイル(150x150)より小さい画像で、gifはアニメーションGIFになっている。
Ref.
tags: ruby imagemagick
Posted by NI-Lab. (@nilab)