Django通过iOS图像上传图片错误地旋转(EXIF问题)

时间:2016-02-21 00:40:24

标签: python iphone django image exif

所以我有这个问题,当有人通过iPhone /智能手机将图像上传到我的Django 1.9.2服务器时,无论何时取出图像,图像都会旋转。我想知道是否有办法检查EXIF数据,如果图像在提交表单/图像时旋转,但在将其保存到模型中之前将其旋转。

我在以下帖子中尝试此Proposed Solution,但我收到此错误:

      File "C:\Users\NAME\PycharmProjects\PROJECT\venv\lib\site-packages\PIL\Image.py", line 628, in __getattr__
    raise AttributeError(name)
AttributeError: _committed

models.py

class ListingImage(models.model):
    image = models.ImageField()

views.py

def create_listing(request):
    if request.method == 'POST':
        im = request.FILES.get('listing_image', '')

        try:
            image=Image.open(im)
            if hasattr(image, '_getexif'): # only present in JPEGs
                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.get(orientation, None)
                    if orientation is None: return

                    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)
        except:
            image = im
        ListingImage.objects.create(image=image)

1 个答案:

答案 0 :(得分:0)

我发现了这一点,好像你需要加载这样的图像 PIL attribute error

image=Image.open(im)
loadedImage = image.load()

their documentation中,您可以找到以下内容

  

打开,打开并标识给定的图像文件。这是一个懒惰的操作;该函数读取文件头,但在您尝试处理数据之前不会从文件中读取实际图像数据(调用load方法强制加载)。