""" Images manager. """ import os.path from io import BytesIO from PIL import Image, ImageOps from .helpers import node_format, preserve_ratio, size from .parser import Tree from .surface import cairo from .url import parse_url IMAGE_RENDERING = { 'optimizeQuality': cairo.FILTER_BEST, 'optimizeSpeed': cairo.FILTER_FAST, } def image(surface, node): """Draw an image ``node``.""" base_url = node.get('{http://www.w3.org/XML/1998/namespace}base') if not base_url and node.url: base_url = os.path.dirname(node.url) + '/' url = parse_url(node.get_href(), base_url) image_bytes = node.fetch_url(url, 'image/*') if len(image_bytes) < 5: return x, y = size(surface, node.get('x'), 'x'), size(surface, node.get('y'), 'y') width = size(surface, node.get('width'), 'x') height = size(surface, node.get('height'), 'y') if image_bytes.startswith(b'\x89PNG') and not surface.map_image: png_file = BytesIO(image_bytes) elif ( image_bytes.startswith((b'