金子邦彦研究室プログラミングRuby プログラミング複数の静止画像からのサムネイル画像の一括生成(Ruby を使用)

複数の静止画像からのサムネイル画像の一括生成(Ruby を使用)

複数の静止画像からのサムネイル画像の一括生成

Ruby プログラムの例

#! ruby -Ks
# coding: windows-31j

# usage: ruby genthumb.rb filelist.rb 100x100 thumb png index.html all.png 20
#        ruby genthumb.rb [file name] [size]  [dir] [extension] 

# This program 
# generate thumbnails 

# generate image file list
#   input : a YAML file that discribe pattern(s) of file names
#           [example of "filelist.rb"]
#           $a = <<-EOS
#           - path: /home/www/teaimage/20100524syouhin
#             pattern: *.JPG
#           - path: /home/www/teaimage/20100524syouhin_data
#             pattern: *.JPG
#           EOS
#   output : thumbnails, HTML file, image file

require 'rubygems'
require 'progressbar'
require 'yaml'
require 'digest/sha2'

load ARGV[0] 
thumb_size = ARGV[1] 
thumb_sub_dir = ARGV[2] 
thumb_ext = ARGV[3] 
thumb_index_html = ARGV[4] 
thumb_images_file = ARGV[5] 
thumb_images_size = ARGV[6] 

b = YAML.load( $a )

for i in b
  # from a pattern to a file list
  files = Dir.glob( i["path"] + "/" + i["pattern"] )
  progress_bar = ProgressBar.new( File.basename(i["path"]), files.length )
  # create thumbnails directory 
    if i["path"][0] = "/" then
      path = i["path"]
    else
      path = Dir.pwd + "/" + i["path"]
    end
    thumb_dir = path + "/" + thumb_sub_dir
    system("mkdir",  thumb_dir)
    f = File.open( thumb_dir + "/" + thumb_index_html, "w" )

  for j in files
    basename = File.basename( j )
    basename2 = File.basename( basename, File.extname( basename ) )
    imfile = path + "/" + basename
    system ( "convert " + imfile.gsub("(","\(").gsub(")","\)") + " -thumbnail " +  thumb_size + " " + thumb_dir + "/" + basename2.gsub("(","\(").gsub(")","\)") + "." + thumb_ext )
    progress_bar.inc
    f.print( "<a href=\"../" + basename + "\"><img src=\"" + basename2.gsub("(","\(").gsub(")","\)") + "." + thumb_ext + "\"></a>" )
  end
  progress_bar.finish
  f.close
  system("rm -f " + thumb_dir+ "/" + thumb_images_file )
  system( "montage -resize " + thumb_images_size + " -geometry +2+2 " + thumb_dir + "/*." + thumb_ext + " " + thumb_dir + "/" + thumb_images_file )
end
#  system("rm -f " + i["path"] + "/thumbs/all_thumb.png" )
#  system( "convert " + i["path"] + "/thumbs/all.png -resize 240 " + i["path"] + "/thumbs/all_thumb.png" )

使用法の例

  1. まず、ファイルリストを記述したファイルを作る。 ファイル名は何でも良い

    [image]
  2. ファイルリストを読み込ませる

    下の実行画面では次のように設定している

    [image]
  3. 生成された HTML ファイル

    [image]
  4. 生成された画像ファイル

    [image]