将枕头图像转换为Django ImageField

时间:2019-03-06 14:25:27

标签: django python-imaging-library

我正在尝试将枕头图像转换为 Django ImageField

基本上,我:

  • ImageField作为输入(来自用户提交的表单)
  • 使用Pillow
  • 打开它
  • 处理它(在这种情况下将其模糊)
  • 将其传递回我的Django表单
  • 尝试保存表格⚠️

这是最后一步,我出现错误'Image' object has no attribute '_committed' (我相信是Django无法保存Pillow图像,需要转换)


def upload_media(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            image = form.cleaned_data['image']

            pil_image = Image.open(image)
            blurred_image = pil_image.filter(ImageFilter.GaussianBlur(100))

            post = Post(image=image, blurred_image=blurred_image)
            post.save()

    return redirect('index')

1 个答案:

答案 0 :(得分:0)

Django文件中的

请求中的数据已转换为fileupload对象。您需要获取此图像并将其转换为字节,然后使用InMemoryUploadedFile类将其转换为fileupload对象。此类的输出是fileupload对象。

image = Img.open(field)
image = image.convert('RGB')
image = image.resize((800, 800), Img.ANTIALIAS)
output = io.BytesIO()
image.save(output, format='JPEG', quality=85)
output.seek(0)
new_pic= InMemoryUploadedFile(output, 'ImageField',
                                    field.name,
                                    'image/jpeg',
                                    sys.getsizeof(output), None)