72 lines
2.1 KiB
Python
Executable file
72 lines
2.1 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import mapnik
|
|
import cairo
|
|
import sys
|
|
import os.path
|
|
import math, operator
|
|
import Image
|
|
|
|
dirname = os.path.dirname(sys.argv[0])
|
|
|
|
widths = [ 800, 600, 400, 300, 250, 200, 150, 100]
|
|
filenames = ["list", "simple"]
|
|
filenames_one_width = ["simple-E", "simple-NE", "simple-NW", "simple-N",
|
|
"simple-SE", "simple-SW", "simple-S", "simple-W",
|
|
"formating-1", "formating-2", "formating-3", "formating-4",
|
|
"shieldsymbolizer-1", "expressionformat"]
|
|
|
|
COMPUTE_THRESHOLD = 0
|
|
|
|
# returns true if pixels are not identical
|
|
def compare_pixels(pixel1, pixel2):
|
|
r_diff = abs(pixel1[0] - pixel2[0])
|
|
g_diff = abs(pixel1[1] - pixel2[1])
|
|
b_diff = abs(pixel1[2] - pixel2[2])
|
|
if(r_diff > COMPUTE_THRESHOLD or g_diff > COMPUTE_THRESHOLD or b_diff > COMPUTE_THRESHOLD):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
# compare tow images and return number of different pixels
|
|
def compare(im1, im2):
|
|
diff = 0
|
|
pixels = im1.size[0] * im1.size[1]
|
|
im1 = im1.getdata()
|
|
im2 = im2.getdata()
|
|
for i in range(3, pixels - 1, 3):
|
|
if(compare_pixels(im1[i], im2[i])):
|
|
diff = diff + 1
|
|
return diff
|
|
|
|
def render(filename, width):
|
|
m = mapnik.Map(width, 100)
|
|
mapnik.load_map(m, os.path.join(dirname, "%s.xml" % filename), False)
|
|
bbox = mapnik.Box2d(-0.05, -0.01, 0.95, 0.01)
|
|
m.zoom_to_box(bbox)
|
|
mapnik.render_to_file(m, '%s-%d-agg.png' % (filename, width))
|
|
im1 = Image.open('%s-%d-reference.png' % (filename, width))
|
|
im2 = Image.open('%s-%d-agg.png' % (filename, width))
|
|
diff = compare(im1, im2)
|
|
if diff == 0:
|
|
rms = 'ok'
|
|
else:
|
|
rms = 'error: %u different pixels' % diff
|
|
|
|
print "Rendering style \"%s\" with width %d ... %s" % (filename, width, rms)
|
|
return m
|
|
|
|
if len(sys.argv) > 1:
|
|
filenames = []
|
|
filenames_one_width = sys.argv[1:]
|
|
|
|
for filename in filenames:
|
|
for width in widths:
|
|
m = render(filename, width)
|
|
mapnik.save_map(m, "%s-out.xml" % filename)
|
|
|
|
for filename in filenames_one_width:
|
|
m = render(filename, 500)
|
|
mapnik.save_map(m, "%s-out.xml" % filename)
|
|
|