#!/usr/bin/python import sys, os, re pics_per_row = 5 rows_per_page = 3 pics_per_page = pics_per_row * rows_per_page quality = 75 quality_thumb = 50 #convert = "d:/imagemagick/convert.exe" convert = "convert" # psg.py /var/photos/berlin07 "Poze Berlin 2007" berlin07 def page_nav(p, n): ret = "" g = lambda x: """ %d """ % (x, x) if p > 1: ret += g(1) if p-1 > 2: ret += "..." if p > 2: ret += g(p-1) ret += "[%d]" % p if p < n-1: ret += g(p+1) if p+1 < n-1: ret += "..." if p < n: ret += g(n) return ret if len(sys.argv) < 4: print "syntax: psg.py path title output_dir" sys.exit() dir, title, out_dir = sys.argv[1:] jobs = open("jobs", "w+") print >>jobs, "default: all" print >>jobs jno = 0 def run_cmd(cmd): global jno print >>jobs, str(jno) + ":" print >>jobs, "\t" + cmd jno += 1 jobs.flush() items = [] files = os.listdir(dir) files.sort() for f in files: m = re.search("^(.+)\.jpe?g$", f, re.I) if not m: continue items.append((f, m.group(1))) n = len(items) os.mkdir(out_dir) index = open(os.path.join(out_dir, "index.html"), "w") index.write("""""") if n > 0: index.write("""""") index.write("""""") index.close() last_page = (n-1) / pics_per_page + 1 for page in xrange(last_page): html = """ %s \n" for col in xrange(pics_per_row): pos = page * pics_per_page + row * pics_per_row + col if pos >= n: continue fname, name = items[pos] pc = (pos + 1) * 40 / n run_cmd("""%s "%s" -quality %d -resize @19200 "%s" """ % \ (convert, os.path.join(dir, fname), quality_thumb, \ os.path.join(out_dir, "thumb_" + fname))) run_cmd("""%s "%s" -quality %d -resize @786432 "%s" """ % \ (convert, os.path.join(dir, fname), quality, \ os.path.join(out_dir, fname))) html_img = """""" % fname html_row += """

%s


""" % (title, pics_per_row, title) for row in xrange(rows_per_page): html_row = "
%s\n""" % \ (fname, html_img) html += html_row html += ("""


%s
""" + \ """[back]\n""") % \ (pics_per_row, page_nav(page+1, last_page)) html += """
""" file = open(os.path.join(out_dir, "p%d.html" % (page + 1)), "w") file.write(html) file.close() print >>jobs print >>jobs, "all:", " ".join([str(x) for x in range(jno)]) jobs.close() print "now run: make -j8 -f jobs"