Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
pattern_height = (
size(surface, pattern_node.pop('height', '1'), 1) * height)
if 'viewBox' not in pattern_node:
pattern_node['width'] = pattern_width
pattern_node['height'] = pattern_height
if pattern_node.get('patternContentUnits') == 'objectBoundingBox':
pattern_node['transform'] = 'scale({}, {})'.format(
width, height)
# Fail if pattern has an invalid size
if pattern_width == 0.0 or pattern_height == 0.0:
return False
from .surface import SVGSurface # circular import
pattern_surface = SVGSurface(pattern_node, None, surface.dpi, surface)
pattern_pattern = cairo.SurfacePattern(pattern_surface.cairo)
pattern_pattern.set_extend(cairo.EXTEND_REPEAT)
pattern_pattern.set_matrix(cairo.Matrix(
pattern_surface.width / pattern_width, 0, 0,
pattern_surface.height / pattern_height, -x, -y))
surface.context.set_source(pattern_pattern)
return True
surface.context.translate(translate_x, translate_y)
surface.draw(tree)
surface.context.restore()
return
else:
png_file = BytesIO()
image = Image.open(BytesIO(image_bytes))
if surface.map_image:
image = surface.map_image(image)
image.save(png_file, 'PNG')
png_file.seek(0)
image_surface = cairo.ImageSurface.create_from_png(png_file)
image_surface.pattern = cairo.SurfacePattern(image_surface)
image_surface.pattern.set_filter(IMAGE_RENDERING.get(
node.get('image-rendering'), cairo.FILTER_GOOD))
node.image_width = image_surface.get_width()
node.image_height = image_surface.get_height()
scale_x, scale_y, translate_x, translate_y = preserve_ratio(
surface, node)
# Clip image region (if necessary)
if not (translate_x == 0 and
translate_y == 0 and
width == scale_x * node.image_width and
height == scale_y * node.image_height):
surface.context.rectangle(x, y, width, height)
surface.context.clip()
surface.context.translate(*surface.context.get_current_point())
surface.context.scale(scale_x, scale_y)
surface.context.translate(translate_x, translate_y)
surface.draw(tree)
surface.context.restore()
return
else:
png_file = BytesIO()
Image.open(BytesIO(image_bytes)).save(png_file, 'PNG')
png_file.seek(0)
image_surface = cairo.ImageSurface.create_from_png(png_file)
### DSB
## Added:
image_surface.pattern = cairo.SurfacePattern(image_surface)
image_surface.pattern.set_filter(cairo.FILTER_NEAREST)
### DSB
node.image_width = image_surface.get_width()
node.image_height = image_surface.get_height()
scale_x, scale_y, translate_x, translate_y = preserve_ratio(
surface, node)
# Clip image region (if necessary)
if not (translate_x == 0 and
translate_y == 0 and
width == scale_x * node.image_width and
height == scale_y * node.image_height):
surface.context.rectangle(x, y, width, height)
surface.context.clip()