如何设置最大图像大小以在 django-ckeditor 中上传图像?

How to set the maximum image size to upload image in django-ckeditor?

我正在为我的项目使用 django-ckeditor 来上传图像和文本内容。
我用了 body = RichTextUploadingField(blank=True, null=True) 在模型中。 现在我想限制用户上传内容中的大尺寸图像或大于预定义的最大值 height/width。我想要上传的图片内容特定 height/weight 并且大小小于 1mb。

如何预定义最大图像高度和宽度以及最大图像大小限制?

有什么方法可以从 django-ckeditor 配置中定义它吗?

或者如何在用户提交表单后从后台调整上传图片的大小?

这是我的 models.py:

class Post(models.Model):
    STATUS_CHOICES = {
      ('draft', 'Draft'),
      ('published', 'Published'),
    }
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = RichTextUploadingField(blank=True, null=True)
    status = models.CharField(max_length=10,
                             choices=STATUS_CHOICES,
                             default='draft')

我尝试了很多方法来解决它,但是 failed.Any 有解决问题的建议吗? 提前致谢。

我认为应该有一种方法可以在上传时调整图片大小。但老实说,我既没有通过调试也没有在文档中找到。

但是,我可以建议您 变通方法 post - 在保存 Post 模型时处理内容中的所有图像。

models.py

from django.conf import settings
from PIL import Image

def resize_image(filename):
    """
    here goes resize logic.
    For example, I've put 50% of current size if width>=900.
    Might be something more sophisticated
    """
    im = Image.open(filename)
    width, height = im.size
    if width >= 500:
        im = im.resize((int(width * 0.5), int(height * 0.5)))
        im.save(filename)

class Post(models.Model):
    ...
    body = RichTextUploadingField(blank=True, null=True)
    ...

    def save(self, *args, **kwargs):
        for token in self.body.split():
            # find all <img src="/media/.../img.jpg">
            if token.startswith('src='):
                filepath = token.split('=')[1].strip('"')   # get path of src
                filepath = filepath.replace('/media', settings.MEDIA_ROOT)  # resolve path to MEDIA_ROOT
                resize_image(filepath)  #do resize in-place

        super().save(*args, **kwargs)

该解决方案不是很好,因为它仅在上传之后调整图片大小。

可能图书馆本身应该有某种 exit-point/callback 用于上传时的图像预处理。

您可以在 setting.py

中设置 CKEDITOR_THUMBNAIL_SIZE
CKEDITOR_THUMBNAIL_SIZE = (500, 500)

使用 pillow 后端,您可以使用 CKEDITOR_THUMBNAIL_SIZE 设置(以前的 THUMBNAIL_SIZE)更改缩略图大小。默认值:(75, 75)

借助pillow后端,您可以将上传的图片转换并压缩为jpeg,节省磁盘空间space。将 CKEDITOR_FORCE_JPEG_COMPRESSION 设置设置为 True(默认 False)您可以更改 CKEDITOR_IMAGE_QUALITY 设置(以前的 IMAGE_QUALITY),它会传递给 Pillow :

The image quality, on a scale from 1 (worst) to 95 (best). The default is 75. Values above 95 should be avoided; 100 disables portions of the JPEG compression algorithm and results in large files with hardly any gain in image quality.

动画图像禁用此功能。

查看官方文档。 https://github.com/django-ckeditor/django-ckeditor/blob/master/README.rst