2011-01-17 17 views

risposta

6

Wow, questa è una richiesta di funzionalità che non mi aspetterei mai! sorl.thumbnail è ora configurabile dal motore e viene fornito con PIL e pgmagick. Penso che ci siano modi per fare gif animate di ridimensionamento imagemagick e quindi forse pgmagick può farlo, ma non l'ho ancora testato ed è improbabile che funzioni con i motori spediti così come sono.

+0

Qualcosa di nuovo? può sorl.thumbnail ridimensionare l'immagine animata gif ora ho trovato che ha il supporto del motore innestabile (ImageMagick, PIL, pgmagick incluso)? – newlife

2

Sono riuscito a far funzionare sorl con gif.

  1. È necessario utilizzare image magick o graphics magick backend (PIL non supporta il ridimensionamento gif senza alcuno hacking). Puoi anche provare pgmagick, ma non so se funzionerà.
  2. metterle da qualche parte nel codice:

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

Si può dare un'occhiata alla fonte SORL-Thumnail di trovare come funziona

UPD: E 'testato. Usalo solo se sei sicuro di quello che stai facendo.

2

Ho una soluzione funzionante (testata con sorl-thumbnail 11.12.1b). Richiede 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

voglio condividere il mio esempio:

# -*- 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 
Problemi correlati