2008/08/31(日) [n年前の日記]
#2 [prog] 画像一覧htmlを出力するPythonスクリプトを作成
以前そういう処理をするPerlスクリプトを作成していたのだけど、PerlMagickが必要なスクリプトで。試しに実行してみたら、PerlMagickが入ってない、と言われる。
Meadowを動かす都合上、Meadowのバージョンに合わせたImageMagick(PerlMagick)をインストールしておかないといかんわけで、そのあたりのやりくりが面倒になってしまって今は入れてなかった、のかもしれず。>自分の環境。かといって、またそのへんの環境設定で苦労するのもやはり面倒。
仕方ないのでPythonで書き直し。Python+PILなら、バージョンを固定してくるアプリ等は無いので。
というか、MeadowのImageMagickバージョン縛りはどうにかならんのか。いやまあ、ImageMagickがやたらバグがあって、あるいは仕様が頻繁に変更されがちなため、バージョン決め打ちじゃないと使えないというのが根本的な原因なんだろうけど。コマンドラインツールに渡すオプション文字列やパラメータすらバージョンによって結構変わってしまうImageMagickはどうにかならんのか。
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ファイル名
[ ツッコむ ]
以上です。