6

有没有可能用 sorl 调整动画 gif 的大小?

4

4 回答 4

6

哇,这是我从未想到的功能要求!sorl.thumbnail现在是引擎可配置的,并带有 PIL 和 pgmagick。我认为有一些方法可以让 imagemagick 调整动画 gif 的大小,所以也许 pgmagick 可以做到这一点,但我没有对此进行测试,而且它不太可能按原样与随附的引擎一起使用。

于 2011-02-23T00:23:32.417 回答
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
于 2014-04-24T16:46:16.657 回答
2

我设法使 sorl 与 gif 一起工作。

  1. 您需要使用图像魔法或图形魔法后端(PIL 不支持在没有一些黑客攻击的情况下调整 gif 大小)。也可以试试pgmagick,不知道行不行。
  2. 将这些放在代码中的某个位置:

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

您可以查看 sorl-thumnail 来源以了解其工作原理

UPD:未经测试。仅当您确定自己在做什么时才使用它。

于 2012-11-01T22:12:15.043 回答
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
于 2017-08-04T04:18:51.923 回答