2016-07-14 6 views
0

Я делаю API, который получает изображения из телефонного приложения. Изображения содержат данные EXIF, и некоторые из этих изображений имеют ориентационный тег (в соответствии с: PIL thumbnail is rotating my image?). В настоящее время я решаю проблему с использованием imagemagick/morgify в командной строке. Но мне интересно, можно ли (или иметь смысл) делать автоматическую ориентацию с PIL/Pillow после получения данных в режиме DRF.Django rest framework - авторотировать изображение с PIL

--edit--

Похоже, я должен использовать сохранения и удаления крючков из http://www.django-rest-framework.org/api-guide/generic-views/

ответ

0

Итак, код (авторотации код копируется из PIL thumbnail is rotating my image?):

from PIL import Image, ExifTags 


def autorotate(path): 
    """ This function autorotates a picture """ 
    image = Image.open(path) 
    if hasattr(image, '_getexif'): # only present in JPEGs 
     orientation = None 
     for orientation in ExifTags.TAGS.keys(): 
      if ExifTags.TAGS[orientation] == 'Orientation': 
       break 
     e = image._getexif() # returns None if no EXIF data 
     if e is not None: 
      exif = dict(e.items()) 
      orientation = exif[orientation] 

      if orientation == 3: 
       image = image.transpose(Image.ROTATE_180) 
      elif orientation == 6: 
       image = image.transpose(Image.ROTATE_270) 
      elif orientation == 8: 
       image = image.transpose(Image.ROTATE_90) 
      image.save(path) 

class ReceivedDataList(generics.ListCreateAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_class = UserFilter 

    def perform_create(self, serializer): 
     instance = serializer.save() 
     autorotate(instance.photo.file.name)