mieki256's diary



2008/08/31() [n年前の日記]

#2 [prog] 画像一覧htmlを出力するPythonスクリプトを作成

以前そういう処理をするPerlスクリプトを作成していたのだけど、PerlMagickが必要なスクリプトで。試しに実行してみたら、PerlMagickが入ってない、と言われる。

Meadowを動かす都合上、Meadowのバージョンに合わせたImageMagick(PerlMagick)をインストールしておかないといかんわけで、そのあたりのやりくりが面倒になってしまって今は入れてなかった、のかもしれず。>自分の環境。かといって、またそのへんの環境設定で苦労するのもやはり面倒。

仕方ないのでPythonで書き直し。Python+PILなら、バージョンを固定してくるアプリ等は無いので。

というか、MeadowのImageMagickバージョン縛りはどうにかならんのか。いやまあ、ImageMagickがやたらバグがあって、あるいは仕様が頻繁に変更されがちなため、バージョン決め打ちじゃないと使えないというのが根本的な原因なんだろうけど。コマンドラインツールに渡すオプション文字列やパラメータすらバージョンによって結構変わってしまうImageMagickはどうにかならんのか。

とりあえずPythonで書いたソレをメモ。 :

mkimglisthtml.py という名前で作成。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- coding:utf-8 -*-
# 
# 画像一覧htmlを作成するPythonスクリプト
# PILを使用
# 使用方法は スクリプト名 -h で表示される。

import re
import os
import sys
from optparse import OptionParser
import Image

def action_read_dir(indir):
    dirname = os.path.abspath(indir)
    filelist = []
    files = os.listdir(dirname)
    p = re.compile(r"\.(gif|jpg|jpeg|png|bmp)$", re.IGNORECASE)
    for fn in files:
        m = p.search(fn)
        if m:
            filelist.append(fn)
    
    return filelist

def output_image_album_html(indir, lst, ofname):
    dirname = os.path.abspath(indir)
    outlist = []
    
    header = """
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<style type="text/css">
<!--
  td.inimg { text-align:left; }
  td { border:1px solid #aaa; padding:3px; }
  body { background-color:#ddd; }
  table { border-collapse:collapse; empty-cells: show; }
  p.filenameinfo {font-size:medium;}
  p.sizeinfo {font-size:small;}
  p.filesizeinfo {font-size:small;}
  p.palinfo {font-size:small;}
-->
</style>
</head>
<body>
<table>
"""
    outlist.append(header) # header 登録
    
    for fn in lst:
        pn = os.path.join(dirname, fn)
        im = Image.open(pn)
        (w, h) = im.size
        filesize = os.path.getsize(pn)
        pal = im.palette
        if pal is None:
            pallen = 0
        else:
            pallen = len(pal.palette) / 3
        
        str = "<tr>"
        str += """<td><p class="filenameinfo">%s</p></td>""" % (fn)
        str += """<td><p class="sizeinfo">%d x %d</p></td>""" % (w, h)
        str += """<td><p class="filesizeinfo">%d byte</p></td>""" % (filesize)
        str += """<td><p class="palinfo">%d color</p></td>""" % (pallen)
        str += """<td class="inimg"><img src="%s" width=%d height=%d alt="%s"></td>""" % (indir+"/"+fn, w, h, fn)
        str += """<td class="incomment"> </td>"""
        str += """</tr>\n"""
        
        outlist.append(str)

    footer = """
</table>
</body>
</html>
"""
    
    outlist.append(footer) # footer登録

    # ファイル出力
    
    if ofname == "":
        for s in outlist:
            print s.encode('cp932')
    else:
        fp = open(ofname, 'w')
        for s in outlist:
            fp.write(s.encode('cp932'))
        fp.close()

def main():
    usage = "usage: %prog [options]"
    parser = OptionParser(usage=usage, version="%prog 0.0.1")
    parser.add_option("-d", "--dir", action="store", type="string",
                      dest="indir", metavar="DIR",
                      help="read DIR name.", default=".")
    parser.add_option("-o", "--output", action="store", type="string",
                      dest="outfilename", metavar="FILE",
                      help="Output html FILE name.", default="")
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose")
    parser.add_option("-q", "--quiet", action="store_false", dest="verbose")
    (options, args) = parser.parse_args()
    
    if len(args) != 0:
        parse.error("incorrect number of arguments")
        
    if options.verbose:
        print "read Dir    [%s]" % options.indir
        print "output html [%s]" % options.outfilename

    lst = action_read_dir(options.indir)
    output_image_album_html(options.indir, lst, options.outfilename)

if __name__=='__main__':
    main()
mkimglisthtml.py -d 画像群が入ってるディレクトリ名 -o 出力htmlファイル名

以上です。

過去ログ表示

Prev - 2008/08 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project