Изменить загруженный формат изображения в Django - PullRequest
0 голосов
/ 12 октября 2018

Это модель, которую я использую для загрузки и переименования файлов изображений в 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.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Наверное, я разобрался с ответом

 def __call__(self, instance, filename):
    png = "png"
    filename = '{}.{}'.format(uuid4().hex, png)
    return os.path.join(self.path, filename)
0 голосов
/ 12 октября 2018

Я бы использовал для этого сигналы 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")

Просто удалите созданную проверку, если вы хотите проверять каждое обновление.

...