Django - 使用不同的文件名保存缩略图

时间:2011-02-15 17:32:16

标签: django

我想创建上传图像文件的缩略图,并在文件名末尾用“_th”保存它们。目前,我使用以下代码:

def _create_thumbnail(img_path):
    image = Image.open(img_path)

    if image.mode not in ("L", "RGB"):
        image = image.convert("RGB")

    image.thumbnail(MEDIA_THUMBNAIL_SIZES, Image.ANTIALIAS)
    return image.save(img_path, 'JPEG', quality=MEDIA_THUMBNAIL_QUALITY)

它会覆盖原始文件。有没有办法在文件扩展名之前轻松更改文件名以包含_th并将其保存在同一个地方?

另外,我使用以下方法在保存信号后保存缩略图:

@receiver(post_save, sender=Media, dispatch_uid="media_create_thumb")
def create_media_thumbnail(sender, **kwargs):
    thumb = generate_thumbnail(kwargs['instance'].file)

我想知道这是否是一种使用信号的正常(pythonic?)方式?由于我没有使用django管理面板,因此使用admins post save不是一个选项。

这个创建缩略图的方法对用户开放,所以如果上面的代码有任何可能导致问题的内容,我会很感激你的抬头!

1 个答案:

答案 0 :(得分:2)

我会尝试以下方法:

import os

(head, tail) = os.path.split(img_path)
(name,ext)=tail.split('.')
tail=name+'_th.'+ext
img_path=os.path.join(head,tail)

修改 正如我最近发现的那样,你甚至可以简化:

(name,ext)=os.path.splitext(img_path)
img_path = name + '_th.' + ext