使用sorl-thumbnail调整动态gif大小

6
有没有可能使用sorl来调整动画gif的大小?
4个回答

6

哇,这是一个我从未预料到的功能请求!sorl.thumbnail现在可以配置引擎,并且带有PIL和pgmagick。我认为有办法让imagemagick调整动画gif的大小,因此也许pgmagick可以做到这一点,但我还没有测试过,而且很不可能与预装的引擎一起使用。


有什么新消息吗?现在sorl.thumbnail可以调整动态gif图像的大小了吗?我发现它支持可插拔引擎(包括ImageMagick、PIL和pgmagick)? - newlife

3

我有一个可行的解决方案(已经测试过,适用于sorl-thumbnail 11.12.1b)。需要使用Wand后端:

#sorl_extensions.py
from sorl.thumbnail.base import (
    ThumbnailBackend, EXTENSIONS,
    default_settings as thumbnail_default_settings
)


EXTENSIONS.update({'GIF': 'gif'})


class GifThumbnailBackend(ThumbnailBackend):
    def _get_format(self, file_):
        file_extension = self.file_extension(file_)

        if file_extension == '.jpg' or file_extension == '.jpeg':
            return 'JPEG'
        elif file_extension == '.png':
            return 'PNG'
        elif file_extension == '.gif':
            return 'GIF'
        else:
            from django.conf import settings

            return getattr(settings, 'THUMBNAIL_FORMAT', thumbnail_default_settings.THUMBNAIL_FORMAT)

#settings.py
THUMBNAIL_ENGINE = 'sorl.thumbnail.engines.wand_engine.Engine'
THUMBNAIL_BACKEND = 'tools.sorl_extensions.GifThumbnailBackend'
THUMBNAIL_PRESERVE_FORMAT = True

2

我成功地让Sorl与gif图片协同工作。

  1. You need to use image magick or graphics magick backend (PIL does not support gif resizing without some hacking). You can also try pgmagick, but I don't know if it will work.
  2. Put these somewhere in your code:

    from sorl.thumbnail import base
    base.EXTENSIONS.update({'GIF': 'gif'})
    

您可以查看sorl-thumnail源代码,了解其工作原理。

更新:此方法未经测试。仅在您确定自己知道在做什么时使用。


0

我将分享我的例子:

# -*- coding: utf-8 -*-
import os
from sorl.thumbnail import get_thumbnail

def get_file_extension(obj):
    filename, file_extension = os.path.splitext(obj)
    return file_extension

def get_thumbnail_size(obj, size):
    img_format = 'JPEG'
    if get_file_extension(obj.url) == '.png':
        img_format = 'PNG'
    if get_file_extension(obj.url) == '.gif':
        from sorl.thumbnail import base
        base.EXTENSIONS.update({'GIF': 'gif'})
        img_format = 'GIF'
    return get_thumbnail(obj, size, quality=90, format=img_format).url

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接