2011-01-17 7 views

Odpowiedz

6

Wow, to jest prośba o funkcję, której nigdy bym się nie spodziewała! sorl.thumbnail jest teraz konfigurowalny przez silnik i jest wyposażony w PIL i pgmagick. Sądzę, że istnieją sposoby na zmianę rozmiaru animowanych gifów imagemagick, więc może pgmagick może to zrobić, ale nie testowałem tego i jest bardzo mało prawdopodobne, aby pracował z dostarczonymi silnikami, tak jak jest.

+0

Co nowego? czy sorl.thumbnail zmienił rozmiar animowanego obrazu gif teraz? Stwierdziłem, że ma on obsługę Pluggable Engine (ImageMagick, PIL, pgmagick w zestawie)? – newlife

2

Udało mi się sprawić, że sorl pracował z GIF.

  1. Musisz użyć magika obrazu lub zaplecza magick grafiki (PIL nie obsługuje zmiany rozmiaru gifa bez hakowania). Możesz także spróbować pgmagick, ale nie wiem, czy to zadziała.
  2. umieścić je gdzieś w kodzie:

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

Można spojrzeć na źródła sorl-thumnail znaleźć jak to działa

UPD: Jest niesprawdzone. Używaj tego tylko wtedy, gdy jesteś pewien, co robisz.

2

Mam rozwiązanie robocze (przetestowane za pomocą miniatury 11.12.1b). Wymaga Wand backend:

#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 
0

będą dzielić mój przykład:

# -*- 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 
Powiązane problemy