From 4999209f9ce01c824020f5b68403c5b4b52d3e8c Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sat, 13 Jul 2019 21:26:05 +0200 Subject: Add support for svg --- libmat2/images.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'libmat2') diff --git a/libmat2/images.py b/libmat2/images.py index 32a329f..8bef3f8 100644 --- a/libmat2/images.py +++ b/libmat2/images.py @@ -1,18 +1,48 @@ import imghdr import os -from typing import Set +from typing import Set, Dict, Union import cairo import gi gi.require_version('GdkPixbuf', '2.0') -from gi.repository import GdkPixbuf, GLib +gi.require_version('Rsvg', '2.0') +from gi.repository import GdkPixbuf, GLib, Rsvg from . import exiftool # Make pyflakes happy assert Set +class SVGParser(exiftool.ExiftoolParser): + mimetypes = {'image/svg+xml', } + meta_allowlist = {'Directory', 'ExifToolVersion', 'FileAccessDate', + 'FileInodeChangeDate', 'FileModifyDate', 'FileName', + 'FilePermissions', 'FileSize', 'FileType', + 'FileTypeExtension', 'ImageHeight', 'ImageWidth', + 'MIMEType', 'SVGVersion', 'SourceFile', 'ViewBox' + } + + def remove_all(self) -> bool: + svg = Rsvg.Handle.new_from_file(self.filename) + dimensions = svg.get_dimensions() + surface = cairo.SVGSurface(self.output_filename, + dimensions.height, + dimensions.width) + context = cairo.Context(surface) + svg.render_cairo(context) + surface.finish() + return True + + def get_meta(self) -> Dict[str, Union[str, dict]]: + meta = super().get_meta() + + # The namespace is mandatory, but thereis only one bossible. + ns = 'http://www.w3.org/2000/svg' + if meta.get('Xmlns', ns) == ns: + meta.pop('Xmlns') + return meta + class PNGParser(exiftool.ExiftoolParser): mimetypes = {'image/png', } meta_allowlist = {'SourceFile', 'ExifToolVersion', 'FileName', -- cgit v1.3