在django中更改上传的图片格式
Change the uploaded image format in django
这是我在 Django 中用于上传和重命名图像文件的模型,
@deconstructible
class PathAndRename(object):
def __init__(self, sub_path):
self.path = sub_path
def __call__(self, instance, filename):
ext = filename.split('.')[-1]
filename = '{}.{}'.format(uuid4().hex, ext)
return os.path.join(self.path, filename)
class Diagram(models.Model):
diagram = models.FileField(upload_to=PathAndRename("diagrams/"))
text = models.CharField(max_length = 48)
date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
现在图像按照其原始格式以 .jpg 和 .png 格式保存。
我的问题是如何将所有上传文件,无论是 .jpg 文件还是 .png 文件以通用格式存储,例如.png 文件中的所有图像。
我会为此使用 django 信号,如下所示:
from Pil import Image
import os
@receiver(post_save, sender=Diagram)
def image_to_png(sender, instance, **kwargs):
if kwargs.get('created') and instance.diagram:
filename, file_ext = os.path.splitext(instance.diagram.path)
if file_ext != ".png":
im = Image.open(instance.diagram.path)
im.save(instance.diagram.path.replace(file_ext, ".png")
如果您想检查每个更新,只需删除创建的验证即可。
我想我找到答案了,
def __call__(self, instance, filename):
png = "png"
filename = '{}.{}'.format(uuid4().hex, png)
return os.path.join(self.path, filename)
这是我在 Django 中用于上传和重命名图像文件的模型,
@deconstructible
class PathAndRename(object):
def __init__(self, sub_path):
self.path = sub_path
def __call__(self, instance, filename):
ext = filename.split('.')[-1]
filename = '{}.{}'.format(uuid4().hex, ext)
return os.path.join(self.path, filename)
class Diagram(models.Model):
diagram = models.FileField(upload_to=PathAndRename("diagrams/"))
text = models.CharField(max_length = 48)
date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
现在图像按照其原始格式以 .jpg 和 .png 格式保存。
我的问题是如何将所有上传文件,无论是 .jpg 文件还是 .png 文件以通用格式存储,例如.png 文件中的所有图像。
我会为此使用 django 信号,如下所示:
from Pil import Image
import os
@receiver(post_save, sender=Diagram)
def image_to_png(sender, instance, **kwargs):
if kwargs.get('created') and instance.diagram:
filename, file_ext = os.path.splitext(instance.diagram.path)
if file_ext != ".png":
im = Image.open(instance.diagram.path)
im.save(instance.diagram.path.replace(file_ext, ".png")
如果您想检查每个更新,只需删除创建的验证即可。
我想我找到答案了,
def __call__(self, instance, filename):
png = "png"
filename = '{}.{}'.format(uuid4().hex, png)
return os.path.join(self.path, filename)