如何获取上传的图像';django的宽度和高度?

如何获取上传的图像';django的宽度和高度?,django,image-upload,Django,Image Upload,如何在django中获取上传图像的宽度和高度 不要使用PIL。委托给专门用于处理图像的包。例如PIL。Django拥有自动执行此计算的功能,但您需要安装PIL 设置后,您将自动获得图像的高度和宽度属性,因此您可以执行以下操作: class SomeModel(models.Model): img = models.ImageField(upload_to='images/') foo = SomeModel.objects.get(pk=1) print('The height is {

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


不要使用PIL。

委托给专门用于处理图像的包。例如PIL。

Django拥有自动执行此计算的功能,但您需要安装PIL

设置后,您将自动获得图像的
高度
宽度
属性,因此您可以执行以下操作:

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))

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

  • 更改项目设置
  • 在项目目录的setting.py末尾追加这些代码

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path(...),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
    然后更改项目目录中的url.py

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path(...),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
  • 提供两个整数字段来存储图像的宽度和高度
  • models.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)
    
  • 创建一个表单,不要包含“图像宽度”和“图像高度”,它们应该是自动隐藏和填充的 forms.py

    class PictureForm(forms.Form)
        image = forms.ImageField()
    
  • 验证和处理视图中的表单,并将数据保存到数据库中
  • views.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})
    

    你为什么不允许使用PIL?这正是它的用途。然后使用我的意思是不要使用其他包,只使用django。django中是否有一种方法或属性可以像request.FILES['filename'].name那样简单地获取上传图像的宽度和高度