diff options
| author | jvoisin | 2015-02-22 10:10:50 +0100 |
|---|---|---|
| committer | jvoisin | 2015-02-22 10:15:34 +0100 |
| commit | 79ce29a7d5e41bb3bb2499bc7eb99164c423aa1d (patch) | |
| tree | 3c8515874cfb9e0469bf0ea32d18b2fee1a66047 /libmat | |
| parent | 655dda11a1eaf740573f019c3e734ef202db2345 (diff) | |
Preliminary implementation of PIL for images.
PIL (Python Image Library) is used to open, then save
images, in order to remove unknown metadata.
Diffstat (limited to 'libmat')
| -rw-r--r-- | libmat/exiftool.py | 7 | ||||
| -rw-r--r-- | libmat/images.py | 16 | ||||
| -rw-r--r-- | libmat/pillow.py | 27 |
3 files changed, 46 insertions, 4 deletions
diff --git a/libmat/exiftool.py b/libmat/exiftool.py index 9e38f04..2c2a2b8 100644 --- a/libmat/exiftool.py +++ b/libmat/exiftool.py | |||
| @@ -1,11 +1,13 @@ | |||
| 1 | ''' Care about images with help of the amazing (perl) library Exiftool. | 1 | ''' Care about images with help of the amazing (perl) library Exiftool. |
| 2 | ''' | 2 | ''' |
| 3 | 3 | ||
| 4 | import parser | ||
| 5 | import subprocess | 4 | import subprocess |
| 6 | 5 | ||
| 6 | import parser | ||
| 7 | import pillow | ||
| 8 | |||
| 7 | 9 | ||
| 8 | class ExiftoolStripper(parser.GenericParser): | 10 | class ExiftoolStripper(parser.GenericParser, pillow.PillowStripper): |
| 9 | ''' A generic stripper class using exiftool as backend | 11 | ''' A generic stripper class using exiftool as backend |
| 10 | ''' | 12 | ''' |
| 11 | 13 | ||
| @@ -25,6 +27,7 @@ class ExiftoolStripper(parser.GenericParser): | |||
| 25 | def remove_all(self): | 27 | def remove_all(self): |
| 26 | ''' Remove all metadata with help of exiftool | 28 | ''' Remove all metadata with help of exiftool |
| 27 | ''' | 29 | ''' |
| 30 | self.open_and_save() | ||
| 28 | try: | 31 | try: |
| 29 | if self.backup: | 32 | if self.backup: |
| 30 | self.create_backup_copy() | 33 | self.create_backup_copy() |
diff --git a/libmat/images.py b/libmat/images.py index 67c710f..2daea88 100644 --- a/libmat/images.py +++ b/libmat/images.py | |||
| @@ -7,9 +7,21 @@ References: | |||
| 7 | ''' | 7 | ''' |
| 8 | 8 | ||
| 9 | import parser | 9 | import parser |
| 10 | import pillow | ||
| 10 | 11 | ||
| 11 | 12 | ||
| 12 | class JpegStripper(parser.GenericParser): | 13 | class ImageStripper(parser.GenericParser, pillow.PillowStripper): |
| 14 | ''' Common stripper for images. | ||
| 15 | Its purpose is to open then save | ||
| 16 | images with PIL, the goal being to remove | ||
| 17 | unknown metadata. | ||
| 18 | ''' | ||
| 19 | def remove_all(self): | ||
| 20 | self.open_and_save() | ||
| 21 | super(ImageStripper, self).remove_all() | ||
| 22 | |||
| 23 | |||
| 24 | class JpegStripper(ImageStripper): | ||
| 13 | ''' Represents a jpeg file. | 25 | ''' Represents a jpeg file. |
| 14 | Custom Huffman and Quantization tables | 26 | Custom Huffman and Quantization tables |
| 15 | are stripped: they may leak | 27 | are stripped: they may leak |
| @@ -34,7 +46,7 @@ class JpegStripper(parser.GenericParser): | |||
| 34 | return True | 46 | return True |
| 35 | 47 | ||
| 36 | 48 | ||
| 37 | class PngStripper(parser.GenericParser): | 49 | class PngStripper(ImageStripper): |
| 38 | ''' Represents a png file | 50 | ''' Represents a png file |
| 39 | ''' | 51 | ''' |
| 40 | def _should_remove(self, field): | 52 | def _should_remove(self, field): |
diff --git a/libmat/pillow.py b/libmat/pillow.py new file mode 100644 index 0000000..556d58a --- /dev/null +++ b/libmat/pillow.py | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | ''' Care about images with help of PIL. | ||
| 2 | This class doesn't remove metadata in the "conventional way"; | ||
| 3 | it opens, then saves the image. This should remove unknown metadata. | ||
| 4 | ''' | ||
| 5 | |||
| 6 | # FIXME Implement this with a decorator instead | ||
| 7 | |||
| 8 | import parser | ||
| 9 | |||
| 10 | |||
| 11 | class PillowStripper(object): | ||
| 12 | ''' This class implements a single method, "open_and_save". | ||
| 13 | It's a class instead of a function so it can be inherited. | ||
| 14 | ''' | ||
| 15 | def open_and_save(self): | ||
| 16 | ''' Open and save the image with PIL. | ||
| 17 | This should remove a lot of unknown metadata. | ||
| 18 | ''' | ||
| 19 | try: | ||
| 20 | from PIL import Image | ||
| 21 | except ImportError: | ||
| 22 | logging.error('Unable to import PIL, image support degraded. Be careful.') | ||
| 23 | |||
| 24 | try: | ||
| 25 | Image.open(self.filename).save(self.filename) | ||
| 26 | except IOError: | ||
| 27 | logging.error('Can not save %s.' % self.filename) | ||
