Django - 旋转图像并保存

时间:2016-05-11 00:02:20

标签: python django python-imaging-library

我想在django中为图像添加“向左旋转”和“向右旋转”按钮。 这似乎很容易,但我已经失去了一些时间,尝试在stackoverflow上找到一些解决方案,但还没有结果。

我的模型有一个FileField:

class MyModel(models.Model):
    ...
    file = models.FileField('file', upload_to=path_and_rename, null=True)
    ...

我正在尝试这样的事情:

def rotateLeft(request,id):
    myModel = myModel.objects.get(pk=id)

    photo_new = StringIO.StringIO(myModel.file.read())
    image = Image.open(photo_new)
    image = image.rotate(-90)

    image_file = StringIO.StringIO()
    image.save(image_file, 'JPEG')

    f = open(myModel.file.path, 'wb')
    f.write(##what should be here? Can i write the file content this way?##) 
    f.close()


    return render(request, '...',{...})

显然,它不起作用。我认为这很简单,但我还不了解PIL和django文件系统,我是django的新手。

抱歉我的英语不好。我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

from django.core.files.base import ContentFile

def rotateLeft(request,id):
    myModel = myModel.objects.get(pk=id)

    original_photo = StringIO.StringIO(myModel.file.read())
    rotated_photo = StringIO.StringIO()

    image = Image.open(original_photo)
    image = image.rotate(-90)
    image.save(rotated_photo, 'JPEG')

    myModel.file.save(image.file.path, ContentFile(rotated_photo.getvalue()))
    myModel.save()

    return render(request, '...',{...})

P.S。为什么使用FileField而不是ImageField?