如何设置最大图像大小以在 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
我正在为我的项目使用 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