From 27beda354d8b78c1716e659273c180d4ddfb144b Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 1 Apr 2018 12:30:00 +0200 Subject: Move every image-related parser into a single file --- src/images.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/images_pixbuf.py | 49 ----------------------------------- src/png.py | 27 -------------------- 3 files changed, 72 insertions(+), 76 deletions(-) create mode 100644 src/images.py delete mode 100644 src/images_pixbuf.py delete mode 100644 src/png.py (limited to 'src') diff --git a/src/images.py b/src/images.py new file mode 100644 index 0000000..560886a --- /dev/null +++ b/src/images.py @@ -0,0 +1,72 @@ +import subprocess +import json +import os + +import cairo + +import gi +gi.require_version('GdkPixbuf', '2.0') +from gi.repository import GdkPixbuf + +from . import abstract + +class PNGParser(abstract.AbstractParser): + mimetypes = {'image/png', } + meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', + 'Directory', 'FileSize', 'FileModifyDate', 'FileAccessDate', + "FileInodeChangeDate", 'FilePermissions', 'FileType', + 'FileTypeExtension', 'MIMEType', 'ImageWidth', 'BitDepth', 'ColorType', + 'Compression', 'Filter', 'Interlace', 'BackgroundColor', 'ImageSize', + 'Megapixels', 'ImageHeight'} + + def get_meta(self): + out = subprocess.check_output(['exiftool', '-json', self.filename]) + meta = json.loads(out.decode('utf-8'))[0] + for key in self.meta_whitelist: + meta.pop(key, None) + return meta + + def remove_all(self): + surface = cairo.ImageSurface.create_from_png(self.filename) + surface.write_to_png(self.output_filename) + return True + +class GdkPixbufAbstractParser(abstract.AbstractParser): + def get_meta(self): + out = subprocess.check_output(['exiftool', '-json', self.filename]) + meta = json.loads(out.decode('utf-8'))[0] + for key in self.meta_whitelist: + meta.pop(key, None) + return meta + + def remove_all(self): + _, extension = os.path.splitext(self.filename) + pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.filename) + if extension == '.jpg': + extension = '.jpeg' + pixbuf.savev(self.output_filename, extension[1:], ["quality"], ["100"]) + return True + + +class JPGParser(GdkPixbufAbstractParser): + mimetypes = {'image/jpg'} + meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', + 'Directory', 'FileSize', 'FileModifyDate', 'FileAccessDate', + "FileInodeChangeDate", 'FilePermissions', 'FileType', + 'FileTypeExtension', 'MIMEType', 'ImageWidth', + 'ImageSize', 'BitsPerSample', 'ColorComponents', 'EncodingProcess', + 'JFIFVersion', 'ResolutionUnit', 'XResolution', 'YCbCrSubSampling', + 'YResolution', 'Megapixels', 'ImageHeight'} + + +class TiffParser(GdkPixbufAbstractParser): + mimetypes = {'image/tiff'} + meta_whitelist = {'Compression', 'ExifByteOrder', 'ExtraSamples', + 'FillOrder', 'PhotometricInterpretation', 'PlanarConfiguration', + 'RowsPerStrip', 'SamplesPerPixel', 'StripByteCounts', + 'StripOffsets', 'BitsPerSample', 'Directory', 'ExifToolVersion', + 'FileAccessDate', 'FileInodeChangeDate', 'FileModifyDate', + 'FileName', 'FilePermissions', 'FileSize', 'FileType', + 'FileTypeExtension', 'ImageHeight', 'ImageSize', 'ImageWidth', + 'MIMEType', 'Megapixels', 'SourceFile'} + diff --git a/src/images_pixbuf.py b/src/images_pixbuf.py deleted file mode 100644 index 8eeffbe..0000000 --- a/src/images_pixbuf.py +++ /dev/null @@ -1,49 +0,0 @@ -import subprocess -import json -import os - -import gi -gi.require_version('GdkPixbuf', '2.0') -from gi.repository import GdkPixbuf - -from . import abstract - -class GdkPixbufAbstractParser(abstract.AbstractParser): - def get_meta(self): - out = subprocess.check_output(['exiftool', '-json', self.filename]) - meta = json.loads(out.decode('utf-8'))[0] - for key in self.meta_whitelist: - meta.pop(key, None) - return meta - - def remove_all(self): - _, extension = os.path.splitext(self.filename) - pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.filename) - if extension == '.jpg': - extension = '.jpeg' - pixbuf.savev(self.output_filename, extension[1:], ["quality"], ["100"]) - return True - - -class JPGParser(GdkPixbufAbstractParser): - mimetypes = {'image/jpg'} - meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', - 'Directory', 'FileSize', 'FileModifyDate', 'FileAccessDate', - "FileInodeChangeDate", 'FilePermissions', 'FileType', - 'FileTypeExtension', 'MIMEType', 'ImageWidth', - 'ImageSize', 'BitsPerSample', 'ColorComponents', 'EncodingProcess', - 'JFIFVersion', 'ResolutionUnit', 'XResolution', 'YCbCrSubSampling', - 'YResolution', 'Megapixels', 'ImageHeight'} - - -class TiffParser(GdkPixbufAbstractParser): - mimetypes = {'image/tiff'} - meta_whitelist = {'Compression', 'ExifByteOrder', 'ExtraSamples', - 'FillOrder', 'PhotometricInterpretation', 'PlanarConfiguration', - 'RowsPerStrip', 'SamplesPerPixel', 'StripByteCounts', - 'StripOffsets', 'BitsPerSample', 'Directory', 'ExifToolVersion', - 'FileAccessDate', 'FileInodeChangeDate', 'FileModifyDate', - 'FileName', 'FilePermissions', 'FileSize', 'FileType', - 'FileTypeExtension', 'ImageHeight', 'ImageSize', 'ImageWidth', - 'MIMEType', 'Megapixels', 'SourceFile'} - diff --git a/src/png.py b/src/png.py deleted file mode 100644 index 377682e..0000000 --- a/src/png.py +++ /dev/null @@ -1,27 +0,0 @@ -import subprocess -import json - -import cairo - -from . import abstract - -class PNGParser(abstract.AbstractParser): - mimetypes = {'image/png', } - meta_whitelist = {'SourceFile', 'ExifToolVersion', 'FileName', - 'Directory', 'FileSize', 'FileModifyDate', 'FileAccessDate', - "FileInodeChangeDate", 'FilePermissions', 'FileType', - 'FileTypeExtension', 'MIMEType', 'ImageWidth', 'BitDepth', 'ColorType', - 'Compression', 'Filter', 'Interlace', 'BackgroundColor', 'ImageSize', - 'Megapixels', 'ImageHeight'} - - def get_meta(self): - out = subprocess.check_output(['exiftool', '-json', self.filename]) - meta = json.loads(out.decode('utf-8'))[0] - for key in self.meta_whitelist: - meta.pop(key, None) - return meta - - def remove_all(self): - surface = cairo.ImageSurface.create_from_png(self.filename) - surface.write_to_png(self.output_filename) - return True -- cgit v1.3