diff options
Diffstat (limited to 'libmat2/images.py')
| -rw-r--r-- | libmat2/images.py | 34 |
1 files changed, 32 insertions, 2 deletions
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 @@ | |||
| 1 | import imghdr | 1 | import imghdr |
| 2 | import os | 2 | import os |
| 3 | from typing import Set | 3 | from typing import Set, Dict, Union |
| 4 | 4 | ||
| 5 | import cairo | 5 | import cairo |
| 6 | 6 | ||
| 7 | import gi | 7 | import gi |
| 8 | gi.require_version('GdkPixbuf', '2.0') | 8 | gi.require_version('GdkPixbuf', '2.0') |
| 9 | from gi.repository import GdkPixbuf, GLib | 9 | gi.require_version('Rsvg', '2.0') |
| 10 | from gi.repository import GdkPixbuf, GLib, Rsvg | ||
| 10 | 11 | ||
| 11 | from . import exiftool | 12 | from . import exiftool |
| 12 | 13 | ||
| 13 | # Make pyflakes happy | 14 | # Make pyflakes happy |
| 14 | assert Set | 15 | assert Set |
| 15 | 16 | ||
| 17 | class SVGParser(exiftool.ExiftoolParser): | ||
| 18 | mimetypes = {'image/svg+xml', } | ||
| 19 | meta_allowlist = {'Directory', 'ExifToolVersion', 'FileAccessDate', | ||
| 20 | 'FileInodeChangeDate', 'FileModifyDate', 'FileName', | ||
| 21 | 'FilePermissions', 'FileSize', 'FileType', | ||
| 22 | 'FileTypeExtension', 'ImageHeight', 'ImageWidth', | ||
| 23 | 'MIMEType', 'SVGVersion', 'SourceFile', 'ViewBox' | ||
| 24 | } | ||
| 25 | |||
| 26 | def remove_all(self) -> bool: | ||
| 27 | svg = Rsvg.Handle.new_from_file(self.filename) | ||
| 28 | dimensions = svg.get_dimensions() | ||
| 29 | surface = cairo.SVGSurface(self.output_filename, | ||
| 30 | dimensions.height, | ||
| 31 | dimensions.width) | ||
| 32 | context = cairo.Context(surface) | ||
| 33 | svg.render_cairo(context) | ||
| 34 | surface.finish() | ||
| 35 | return True | ||
| 36 | |||
| 37 | def get_meta(self) -> Dict[str, Union[str, dict]]: | ||
| 38 | meta = super().get_meta() | ||
| 39 | |||
| 40 | # The namespace is mandatory, but thereis only one bossible. | ||
| 41 | ns = 'http://www.w3.org/2000/svg' | ||
| 42 | if meta.get('Xmlns', ns) == ns: | ||
| 43 | meta.pop('Xmlns') | ||
| 44 | return meta | ||
| 45 | |||
| 16 | class PNGParser(exiftool.ExiftoolParser): | 46 | class PNGParser(exiftool.ExiftoolParser): |
| 17 | mimetypes = {'image/png', } | 47 | mimetypes = {'image/png', } |
| 18 | meta_allowlist = {'SourceFile', 'ExifToolVersion', 'FileName', | 48 | meta_allowlist = {'SourceFile', 'ExifToolVersion', 'FileName', |
