python - 如何在将 ImageField 图像保存在 python Django 模型中之前调整其大小
问题描述
我正在尝试实现一个 Django ImageField 类函数来调整图像大小但是我不确定这个函数在哪里接受我的新图像尺寸
在 Linux 和 Python 3.7 上运行
我看过这个文档,但不太明白: https ://docs.djangoproject.com/en/1.11/_modules/django/db/models/fields/files/#ImageField
如果有人可以向我展示如何使用此功能的示例,我将不胜感激。
编辑
我还没有成功地调整我的图像尺寸,这就是我想要实现的。鉴于它正在被获取,我如何在保存它之前调整它的大小ImageField
(我找到了update_dimensions_fields
类函数ImageField
但是我不知道如何使用它)
class Posts(models.Model):
title = models.CharField(max_length=200, blank=True)
body = models.TextField(blank=True)
created_at = models.DateTimeField(default=datetime.datetime.now)
post_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
# I would like to use the function beneath to resize my images before I save them to my database
self.post_image.update_dimension_fields(self, instance, force=False, *args, **kwargs)
super().save(*args, **kwargs) # Call the "real" save() method.
class Meta:
verbose_name_plural = "Posts"
解决方案
您可以使用django-resized库。它会在上传时调整图像大小并为您存储它们。
用法
from django_resized import ResizedImageField
class Posts(models.Model):
title = models.CharField(max_length=200, blank=True)
body = models.TextField(blank=True)
created_at = models.DateTimeField(default=datetime.datetime.now)
post_image = ResizedImageField(size=[500, 300], upload_to=get_image_path, blank=True, null=True)
def __str__(self):
return self.title
选项
- size - 最大宽度和高度,例如 [640, 480]
- 裁剪- 调整大小和裁剪。['top', 'left'] - 左上角,['middle', - 'center'] 是中心裁剪,['bottom', 'right'] - 裁剪右下角。
- 质量- 调整大小图像的质量 1..100
- keep_meta - 保留 EXIF 和其他元数据,默认 True
- force_format - 强制调整后图像的格式,可用的格式是枕头支持的格式,默认为无
推荐阅读
- android - 我与 Transformations.map 的绑定似乎不起作用
- java - 在 Postman 收集运行中失败的所有 POST 测试
- python-3.x - 在 VS Code 中启动 Python Interactive 的问题
- python - 已解决:我怎样才能得到像 0.9 这样的小数作为百分比,所以我的数字增加了 0.9%?
- asp.net-core - Razor 组件 (Blazor) - 影响派生类列表的渲染模式
- timer - 如何在 ARM Cortex-A7 中初始化内核定时器
- python - 错误:“pkg_resources.DistributionNotFound:未找到 'zipp>=0.5' 分发,并且 importlib-metadata 需要”
- django - 带有 digitalocean 的 docker 容器上的“DisallowedHost”问题
- cpu - 无法使用“mpirun”命令运行程序
- javascript - D3 JS使用路径在顶部而不是底部堆叠条