画像縦横サイズ一括指定

gemでimagesizeというのを見つけたので全HTMLの全img要素に画像の縦横サイズを挿入するスクリプトを作ってみようと思った。ひとまず全img要素のファイルサイズを標準出力とログファイルに吐き出すところまで実装。

が、一部のがjpgで正常にファイルサイズを取得できず。。。くそー!

$KCODE = 'sjis' #テストしてるサイトがsjisだったので・・。

require 'kconv'
require 'rubygems'
require 'image_size'
require 'find'
require 'hpricot'

log = open("check-img-size.log","w")

htmls=[] #HTMLファイルのパスが入る配列

Find.find(".") do |path|
  if path.match(/\.html$/) #とりあえず拡張子は html のみ
    htmls.push(path.to_s)
  end
end

htmls.each do |html| #各HTMLを
  doc = Hpricot(open(html,"r")) #Hpricotで開いて
  puts "http://old_temp.localhost"+html.sub(/^\./,"")+"\n" #開いたファイルを標準出力と
  log << "http://old_temp.localhost"+html.sub(/^\./,"")+"\n" #ログファイルに記録。
  doc.search('img').each do |img| #HTML内の各img要素から
    img_path="."+img.attributes["src"].to_s #src属性を取得し画像ファイルのパスを取得し
    log << img_path+"\n" #画像パスをログファイルに記録。
    if FileTest.exist?(img_path) #画像ファイルが存在すれば
      open(img_path) do |img_file| #画像ファイルを開き
        begin
          img_size=ImageSize.new(img_file.read).get_size.join(",") #縦横サイズを取得し
          puts img_size #標準出力と
          log << img_size+"\n" #ログファイルに吐き出す。
        rescue Exception #もし取得できなければ
          puts "couldn't get image size" #標準出力と
          log << "couldn't get image size\n" #ログファイルにエラーメッセージを残す
        end
      end
    end
  end
end

何ファイルかに一回"couldn't get image size"って出ちゃうんだよなー。たぶんjpg画像がおかしんだろうけどどうにか計る方法ないかな。
これが出来ればあとはimg要素にheightとwidth挿入するだけなのに。


ていうか今日に限って会社に人が居ないのは偶然だよね。