diff --git a/README.md b/README.md new file mode 100644 index 0000000..35b023b --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +Installation +============= + +Make sure your virtualenv is up to date (had troubles with html5lib). + +Create and activate your venv. + + virtualenv venv + source venv/bin/activate + +Install python dependencies with pip + + pip install pillow html5lib mwclient + diff --git a/index.html b/index.html index 4bde282..3dce3f1 100644 --- a/index.html +++ b/index.html @@ -18,10 +18,32 @@ diff --git a/scripts/imagetile2.py b/scripts/imagetile2.py index b9df4f7..a41e759 100755 --- a/scripts/imagetile2.py +++ b/scripts/imagetile2.py @@ -12,7 +12,7 @@ def fitbox (boxw, boxh, w, h): return rw, rh -def tile_image (im, maxz=0, tilew=256, tileh=256, base=".", template="z{0[z]}y{0[y]}x{0[x]}.jpg", bgcolor=(0,0,0)): +def tile_image (im, maxz=0, tilew=256, tileh=256, base=".", template="z{0[z]}y{0[y]}x{0[x]}.jpg", bgcolor=(0,0,0), margin_right=0, margin_bottom=0): z = 0 boxw, boxh = tilew, tileh @@ -20,7 +20,7 @@ def tile_image (im, maxz=0, tilew=256, tileh=256, base=".", template="z{0[z]}y{0 while True: rw, rh = fitbox(boxw, boxh, im.size[0], im.size[1]) - rim = im.resize((rw, rh), Image.ANTIALIAS) + rim = im.resize((rw-margin_right, rh-margin_bottom), Image.ANTIALIAS) if bgcolor: tim = Image.new("RGB", (boxw, boxh), bgcolor) tim.paste(rim, (0, 0)) diff --git a/scripts/leaflet.py b/scripts/leaflet.py index 77b92dd..0053a3d 100755 --- a/scripts/leaflet.py +++ b/scripts/leaflet.py @@ -111,7 +111,7 @@ def split4(items): ret = [items[0:c],items[c:c*2],items[c*2:c*3],items[c*3:]] return tuple([el(x, c) for x in ret]) -def gridrender (items, basename, tilewidth=256, tileheight=256, z=0, y=0, x=0): +def gridrender (items, basename, tilewidth=320, tileheight=320, z=0, y=0, x=0): """ items are now nodes proper """ """ Takes a list of nodes and returns a new node where items are arranged in a cascade of nodes such that all items appear at the same (z) level -- side by side @@ -141,7 +141,7 @@ def gridrender (items, basename, tilewidth=256, tileheight=256, z=0, y=0, x=0): return node -def recursiverender (items, basename, tilewidth=256, tileheight=256, direction=3, z=0): +def recursiverender (items, basename, tilewidth=320, tileheight=320, direction=3, z=0): node = {} node['text'] = '' # if len(items) >=1 and 'date' in items[0].item: diff --git a/scripts/mediawiki.py b/scripts/mediawiki.py index b746f31..97a4fb6 100644 --- a/scripts/mediawiki.py +++ b/scripts/mediawiki.py @@ -74,7 +74,7 @@ def wiki_title_to_url (wiki, title): ret += "/" + p.normalize_title(p.name) return ret -def ensure_wiki_image_tiles (wiki, imagepageurl, text='', basepath="tiles", force=False, bgcolor=None, tilewidth=256, tileheight=256, zoom=3): +def ensure_wiki_image_tiles (wiki, imagepageurl, text='', basepath="tiles", force=False, bgcolor=None, tilewidth=256, tileheight=256, zoom=3, margin_right=0, margin_bottom=0): print ("ensure_wiki_image_tiles", imagepageurl, file=sys.stderr) page, imageurl = mwfilepage_to_url(wiki, imagepageurl) path = os.path.join(basepath, url_to_path(imageurl)) @@ -89,7 +89,7 @@ def ensure_wiki_image_tiles (wiki, imagepageurl, text='', basepath="tiles", forc except OSError: pass im = Image.open(urlopen(imageurl)) - tile_image(im, zoom, tilewidth, tileheight, path+"/", ret.tilename, bgcolor) + tile_image(im, zoom, tilewidth, tileheight, path+"/", ret.tilename, bgcolor, margin_right, margin_bottom) return ret def textcell (paras): @@ -104,7 +104,7 @@ def name_to_path (name): return name.replace("/", "_") -def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3): +def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3, tilewidth=256, tileheight=256): print ("render_article", ref, file=sys.stderr) if type(ref) == Page: page = ref @@ -150,7 +150,7 @@ def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3): # article = wiki_absurl(wiki, article) # images.append(render_article(wiki, article, caption, basepath, depth+1, maxdepth)) # else: - images.append(ensure_wiki_image_tiles(wiki, src, caption, basepath).zoom()) + images.append(ensure_wiki_image_tiles(wiki, src, caption, basepath, tilewidth=tilewidth, tileheight=tileheight).zoom()) for a in body.findall('.//a[@class="image"]'): caption = a.attrib.get("title", '') @@ -162,7 +162,7 @@ def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3): if src in imgsrcs: continue imgsrcs[src] = True - images.append(ensure_wiki_image_tiles(wiki, src, caption, basepath).zoom()) + images.append(ensure_wiki_image_tiles(wiki, src, caption, basepath, tilewidth=tilewidth, tileheight=tileheight).zoom()) print ("{0} paras, {1} images".format(len(paras), len(images)), file=sys.stderr) @@ -179,7 +179,7 @@ def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3): cells.append(textcell(paras)) cells.extend(images) - ret = recursiverender(cells, basename) + ret = recursiverender(cells, basename, tilewidth=tilewidth, tileheight=tileheight) ret['text'] = u"""

{0}WIKI

""".format(title, ref) if images: ret['image'] = images[0]['image'] @@ -200,7 +200,7 @@ def render_article (wiki, ref, basepath="tiles", depth=0, maxdepth=3): # children.append(gridrender(restimages, basename)) # return article -def render_category (wiki, cat, output="tiles"): +def render_category (wiki, cat, output="tiles", tilewidth=256, tileheight=256): print ("Render Category", cat, file=sys.stderr) # if type(cat) == Page: # page = ref @@ -218,10 +218,10 @@ def render_category (wiki, cat, output="tiles"): for m in cat.members(): pages.append(m) pages.sort(key=lambda x: x.name) - pagenodes = [render_article(wiki, x.name) for x in pages] + pagenodes = [render_article(wiki, x.name, tilewidth=tilewidth, tileheight=tileheight) for x in pages] for page, node in zip(pages, pagenodes): node['text'] = u"""

{0}WIKI

""".format(page.name, wiki_title_to_url(wiki, page.name)) - ret = gridrender(pagenodes, output+"/"+cat.name.replace(":", "_")) + ret = gridrender(pagenodes, output+"/"+cat.name.replace(":", "_"), tilewidth=tilewidth, tileheight=tileheight) ret['text'] = u"""

{1}

""".format(wiki_title_to_url(wiki, cat.name), cat.name) return ret # for p in pages: @@ -238,7 +238,7 @@ def make_category (args): def make_article (args): wiki = Site((args.wikiprotocol, args.wikihost), path=args.wikipath) - root_node = render_article(wiki, args.wikipage) + root_node = render_article(wiki, args.wikipage, tilewidth=args.tilewidth, tileheight=args.tileheight) if args.html: print (html(root_node, "")) else: @@ -248,7 +248,7 @@ def make_gallery(args): wiki = Site((args.wikiprotocol, args.wikihost), path=args.wikipath) # apiurl = args.wikiprotocol+"://"+args.wikihost+args.wikipath+"api.php" if len(args.wikipage) == 1: - root_node = render_article(wiki, args.wikipage[0]) + root_node = render_article(wiki, args.wikipage[0], tilewidth=args.tilewidth, tileheight=args.tileheight) else: children = [] for wikipage in args.wikipage: @@ -257,12 +257,12 @@ def make_gallery(args): print ("rendering", wikipage, file=sys.stderr) cnode = render_category(wiki, wikipage, args.output) else: - cnode = render_article(wiki, wikipage) + cnode = render_article(wiki, wikipage, tilewidth=args.tilewidth, tileheight=args.tileheight) children.append(cnode) if args.recursive: - root_node = recursiverender(children, args.output+"/"+args.name, direction=1) + root_node = recursiverender(children, args.output+"/"+args.name, direction=1, tilewidth=args.tilewidth, tileheight=args.tileheight) else: - root_node = gridrender(children, args.output+"/"+args.name, direction=1) + root_node = gridrender(children, args.output+"/"+args.name, direction=1, tilewidth=args.tilewidth, tileheight=args.tileheight) if args.html: print (html(root_node, "")) @@ -273,6 +273,7 @@ def make_gallery(args): def testwiki (args): return Site((args.wikiprotocol, args.wikihost), path=args.wikipath) + if __name__ == "__main__": ap = ArgumentParser("")