2

如何在 django 中获取上传图像的宽度和高度?

不要使用 PIL。

4

3 回答 3

2

ImageField 将自动处理图像的宽度和高度。你不需要做任何事情。

  1. 更改项目设置

将这些代码附加到项目目录中 setting.py 的末尾

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

然后更改项目目录中的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path(...),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 提供两个整数字段来存储图片的宽高

模型.py

class Picture(models.Model):
    image = models.ImageField(upload_to='images/', width_field = 'image_width', height_field='image_height')
    image_width = models.IntegerField(default=0)
    image_height = models.IntegerField(default=0)
  1. 创建一个表单,不要包含“image_width”和“image_height”,它们应该是隐藏和自动填充的。

表格.py

class PictureForm(forms.Form)
    image = forms.ImageField()
  1. 验证和处理视图中的表单并将数据保存到数据库中

视图.py

def createPicture(request):
    form = PictureForm(request.POST, request.FILES)
    if form.is_valid():
        picture = Picture()
        picture.image = form.cleaned_data['image']
        picture.save()
        return HttpResponseRedirect(reverse('picture-list'))
    else:
        form = PictureForm()
    return render(request, 'template_file', {'form' : form})
于 2018-06-29T03:56:51.987 回答
0

委托给专门用于处理图像的包。比如太平船务。

于 2013-07-22T02:59:34.930 回答
0

DjangoImageField会自动执行此计算,但您需要安装 PIL。

设置完成后,您将自动获取图像heightwidth属性,因此您可以执行以下操作:

class SomeModel(models.Model):
   img = models.ImageField(upload_to='images/')

foo = SomeModel.objects.get(pk=1)
print('The height is {0.height} and the width is {0.width}'.format(foo.img))
于 2013-07-22T08:10:13.297 回答