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ファイル名
[ ツッコむ ]
以上です。