def clean_photo(self): photo = self.cleaned_data.get('photo') if not photo: return photo from fixcity.exif_utils import rotate_image_by_exif from PIL import Image img = Image.open(photo) rotated = rotate_image_by_exif(img) if not (rotated is img): photo.seek(0) rotated.save(photo) return photo
def forwards(self, orm): """Fix all uploaded images.""" from PIL import Image from fixcity.exif_utils import rotate_image_by_exif from django.conf import settings import os.path import glob root = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'images', 'racks')) for path in glob.glob(root + '/*jpg') + glob.glob(root + '/*JPG'): img = Image.open(path) rotated = rotate_image_by_exif(img) if rotated != img: rotated.save(path)
def test_rotate_image_by_exif(self): img = self._make_image('test_exif.jpg') rotated = exif_utils.rotate_image_by_exif(img) self.failIfEqual(img, rotated) # Unfortunately PIL doesn't save exif info on new images... self.assertEqual(exif_utils.get_exif_info(rotated), {})
def test_rotate_image_by_exif__no_info(self): img = self._make_image('test_no_exif.jpg') self.assertEqual(img, exif_utils.rotate_image_by_exif(img))