Merge pull request #184 from saimn/pillow
Warn that Pillow 3.0 is broken.
This commit is contained in:
@@ -4,6 +4,9 @@ python:
|
||||
- "3.3"
|
||||
- "3.4"
|
||||
- "3.5"
|
||||
env:
|
||||
- PILLOW_VERSION=2.9.0
|
||||
- PILLOW_VERSION=3.0.0
|
||||
before_install:
|
||||
# Dependencies to build PIL
|
||||
- sudo apt-get update -qq
|
||||
@@ -11,6 +14,7 @@ before_install:
|
||||
- sudo apt-get install -qq libfreetype6-dev libjpeg8-dev zlib1g-dev ffmpeg
|
||||
- sudo locale-gen fr_FR.UTF-8
|
||||
install:
|
||||
- pip install -q Pillow==$PILLOW_VERSION
|
||||
- pip install pytest pytest-cov
|
||||
- pip install coveralls
|
||||
- pip install .
|
||||
|
||||
@@ -163,7 +163,7 @@ class Image(Media):
|
||||
try:
|
||||
return (get_exif_data(self.src_path)
|
||||
if self.ext in ('.jpg', '.jpeg') else None)
|
||||
except (IOError, IndexError, TypeError, AttributeError):
|
||||
except Exception:
|
||||
self.logger.warning(u'Could not read EXIF data from %s',
|
||||
self.src_path)
|
||||
return None
|
||||
|
||||
@@ -32,8 +32,10 @@
|
||||
|
||||
import logging
|
||||
import os
|
||||
import PIL
|
||||
import pilkit.processors
|
||||
import sys
|
||||
import warnings
|
||||
|
||||
from copy import deepcopy
|
||||
from datetime import datetime
|
||||
@@ -179,8 +181,19 @@ def get_size(file_path):
|
||||
def get_exif_data(filename):
|
||||
"""Return a dict with the raw EXIF data."""
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
if PIL.PILLOW_VERSION == '3.0.0':
|
||||
warnings.warn('Pillow 3.0.0 is broken with EXIF data, consider using '
|
||||
'a previous version if you want to use EXIF data.')
|
||||
|
||||
img = PILImage.open(filename)
|
||||
exif = img._getexif() or {}
|
||||
try:
|
||||
exif = img._getexif() or {}
|
||||
except ZeroDivisionError:
|
||||
logger.warning('Failed to read EXIF data.')
|
||||
return None
|
||||
|
||||
data = {TAGS.get(tag, tag): value for tag, value in exif.items()}
|
||||
|
||||
if 'GPSInfo' in data:
|
||||
@@ -189,7 +202,7 @@ def get_exif_data(filename):
|
||||
for tag, value in data['GPSInfo'].items()}
|
||||
except AttributeError:
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.info('Failed to get GPS Info', exc_info=True)
|
||||
logger.info('Failed to get GPS Info')
|
||||
del data['GPSInfo']
|
||||
return data
|
||||
|
||||
@@ -211,7 +224,10 @@ def get_exif_tags(data):
|
||||
|
||||
for tag in ('Model', 'Make', 'LensModel'):
|
||||
if tag in data:
|
||||
simple[tag] = data[tag].strip()
|
||||
if isinstance(data[tag], tuple):
|
||||
simple[tag] = data[tag][0].strip()
|
||||
else:
|
||||
simple[tag] = data[tag].strip()
|
||||
|
||||
if 'FNumber' in data:
|
||||
fnumber = data['FNumber']
|
||||
@@ -240,7 +256,7 @@ def get_exif_tags(data):
|
||||
exptime = data['ExposureTime']
|
||||
if isinstance(exptime, tuple):
|
||||
try:
|
||||
simple['exposure'] = exptime[0] / exptime[1]
|
||||
simple['exposure'] = exptime[0] / float(exptime[1])
|
||||
except IndexError:
|
||||
# Pillow >= 3.0
|
||||
simple['exposure'] = exptime[0]
|
||||
|
||||
Reference in New Issue
Block a user