def image_shape(self, module, filename, img_key, **kwargs): svg = self._get_shape_svg(module, 'image_shapes', filename) _, _, image = request.env['ir.http'].binary_content( xmlid=img_key, model='ir.attachment', field='datas', default_mimetype='image/png') if not image: image = request.env['ir.http']._placeholder() img = binary_to_image(image) width, height = tuple(str(size) for size in img.size) root = etree.fromstring(svg) root.attrib.update({'width': width, 'height': height}) # Update default color palette on shape SVG. svg, _ = self._update_svg_colors( kwargs, etree.tostring(root, pretty_print=True).decode('utf-8')) # Add image in base64 inside the shape. uri = image_data_uri(b64encode(image)) svg = svg.replace('<image xlink:href="', '<image xlink:href="%s' % uri) return request.make_response(svg, [ ('Content-type', 'image/svg+xml'), ('Cache-control', 'max-age=%s' % http.STATIC_CACHE_LONG), ])
def image_shape(self, module, filename, img_key, **kwargs): svg = self._get_shape_svg(module, 'image_shapes', filename) record = request.env['ir.binary']._find_record(img_key) stream = request.env['ir.binary']._get_image_stream_from(record) if stream.type == 'url': return stream.get_response() if stream.type == 'path': with file_open(stream.path, 'rb') as file: image = file.read() else: image = stream.data img = binary_to_image(image) width, height = tuple(str(size) for size in img.size) root = etree.fromstring(svg) root.attrib.update({'width': width, 'height': height}) # Update default color palette on shape SVG. svg, _ = self._update_svg_colors( kwargs, etree.tostring(root, pretty_print=True).decode('utf-8')) # Add image in base64 inside the shape. uri = image_data_uri(b64encode(image)) svg = svg.replace('<image xlink:href="', '<image xlink:href="%s' % uri) return request.make_response(svg, [ ('Content-type', 'image/svg+xml'), ('Cache-control', 'max-age=%s' % http.STATIC_CACHE_LONG), ])