class FormatException(Exception): pass def pil_dimensions(im): from PIL import Image i = Image.open(im.asPath()) return i.size def rsvg_dimensions(im): import rsvg, glib try: handle = rsvg.Handle(im.asPath()) # 1pt = 1.25px return handle.props.width*1.25, handle.props.height*1.25 except glib.GError, e: raise FormatException(e) def get_dimensions(im): """Returns a tuple (width, height) for the image in the given Intermed.""" assert im.getExtension() in MEASURABLE_FORMATS, ("Unknown format: " + im.getExtension()) return MEASURABLE_FORMATS[im.getExtension()](im) def get_measurable_format(format): if format in MEASURABLE_FORMATS: return format elif format in VECTOR_FORMATS: return '.svg' else: return '.png' PIL_WRITABLE_FORMATS = ('.png', '.jpg', '.gif', '.tiff', '.bmp', '.ppm', '.xbm') PIL_READ_ONLY_FORMATS = ('.xpm', '.ico') PIL_RASTER_FORMATS = PIL_WRITABLE_FORMATS + PIL_READ_ONLY_FORMATS PSTOEDIT_READABLE_FORMATS = ('.eps', '.epdf') RASTER_FORMATS = PIL_RASTER_FORMATS VECTOR_FORMATS = PSTOEDIT_READABLE_FORMATS MEASURABLE_FORMATS = {'.svg': rsvg_dimensions} for f in PIL_RASTER_FORMATS: MEASURABLE_FORMATS[f] = pil_dimensions