hitode909の日記

趣味はマリンスポーツですの日記です

ターミナルから指定した画像をまとめて見るスクリプト

僕はターミナルから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以下じゃなくてカレントディレクトリに作るようにしました。