僕はターミナルからopen *.jpgなどして大量の画像を見る人なのですが、openするとPreview.appが開いてしまい、大量の画像を見るには適しておらず、困っていました。
で、画像を順に表示するだけのhtmlをその場で作って、ブラウザで開けば、便利に見られるのではないかと思い、作ってみました。
こんなかんじに、ディレクトリを指定すると、画像を表示するだけのhtmlができて、勝手にブラウザが開きます。
開いた直後にhtmlは削除しているので、リロードはできませんが、ゴミがたまることもありません。
-qのオプションを渡すと、Quick Lookで表示するようにしました。これはCtrl-cしてからhtmlを消すので少し安心です。
てきとうに組み合わせて、tumblrとかの画像を勝手に集めて回って、保存が終わったら勝手にブラウザで開くようにして、cronで回しておけば、仕事中でもじゃんじゃん画像が開いたりして、楽しい職場になると思います。
#!/usr/bin/env ruby # open all pictures in specified directories or current directory require 'tempfile' # -q = open with quick look quicklook = false if ARGV[0] == "-q" quicklook = true ARGV.shift end # name of output file outfile = "/tmp/imgview#{Time.now.to_i.to_s}.html" # array of directories which want to open dirs = ( ARGV.empty? ? [Dir.pwd] : ARGV ).map{ |d| d.gsub(/\/$/,'') }.uniq # should open the output file? # this will be true if the directories include a picture. shouldopen = false # generate html open(outfile,'w') do |out| out.puts "<html>" out.puts "<head><title>#{dirs.join(' ')}</title></head>" out.puts "<body>" dirs.each do |d| Dir.foreach(d) do |file| if /\.(jpg|png|gif|bmp)$/i =~ file shouldopen = true out.puts "<p><img src=#{d.gsub(" ","%20")}/#{file.gsub(" ","%20")}></p>" end end out.puts "</body></html>" end end # open tempfile or print error message if shouldopen if quicklook system "qlmanage -p #{outfile} >& /dev/null" else system "open #{outfile}" sleep 1 end else puts "error: no file to open." end # delete tempfile File.delete(outfile)
ファイル単位で指定できるようにした
ディレクトリ単位で指定するのはおかしい気がしたので、*.jpgみたいなで指定できるようにしました。imgタグで表示できるものは表示できます。
#!/usr/bin/env ruby # open specified pictures # 2008.06.12 require 'tempfile' # -q = open with quick look quicklook = false if ARGV[0] == "-q" quicklook = true ARGV.shift end abort "no target file" if ARGV.empty? # name of output file outfile = "imgview#{Time.now.to_i.to_s}.html" # should open the output file? # this will be true if the directories include a picture. shouldopen = false # generate html open(outfile,'w') do |out| out.puts "<html>" out.puts "<head><title>#{Time.now}</title></head>" out.puts "<body>" ARGV.each do |a| out.puts "<p><img src=#{a.gsub(" ","%20")}></p>" end out.puts "</body></html>" end # open tempfile or print error message if quicklook system "qlmanage -p #{outfile} >& /dev/null" else system "open #{outfile}" sleep 1 end # delete tempfile File.delete(outfile)
書くの忘れてましたが、openとかquicklookとか使ってるので、Mac専用です。
追記
なんか下のやつが動かなかったので、一時ファイルを/tmp以下じゃなくてカレントディレクトリに作るようにしました。