Изменение размера анимированных картинок с помощью sorl-thumbnail - PullRequest
5 голосов
/ 17 января 2011

Есть ли возможность изменить размер анимационных картинок с помощью sorl?

Ответы [ 4 ]

6 голосов
/ 23 февраля 2011

Ух ты, такой запрос на функцию я бы никогда не ожидал!sorl.thumbnail теперь настраивается двигателем и поставляется с PIL и pgmagick.Я думаю, что есть способы заставить imagemagick изменять размер анимированных GIF-файлов, и, возможно, pgmagick может это сделать, но я не проверял это, и очень маловероятно, что он будет работать с поставляемыми движками как есть.

3 голосов
/ 24 апреля 2014

У меня есть рабочее решение (протестировано с 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 голосов
/ 02 ноября 2012

Мне удалось заставить sorl работать с gif.

  1. Вам необходимо использовать магию изображений или графический магический бэкэнд (PIL не поддерживает изменение размера gif без некоторого взлома).Вы также можете попробовать pgmagick, но я не знаю, сработает ли это.
  2. Поместите это где-нибудь в свой код:

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

Вы можетевзгляните на источник sorl-thumnail, чтобы узнать, как это работает

UPD: не проверено.Используйте это, только если вы уверены в том, что делаете.

0 голосов
/ 04 августа 2017

Я поделюсь своим примером:

# -*- 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
...