2016-02-01 16 views
8

Ho letto e provato varie app di thumbnailing per Django. Questi sono i requisiti:Django easy-thumbnails vs sorl-thumbnail differences

  • Tutte le miniature generate devono essere salvati in un secchio S3 separata dalle immagini originali, ovvero classe separata di stoccaggio

  • Quando l'istanza dell'immagine viene eliminata, il file di immagine originale insieme tutte le miniature generate devono essere eliminate anche

  • Ridurre al minimo le inefficienze costose, ad es. Recupero l'URL di una miniatura per serializzare in DRF non dovrebbe guardare in S3 secchio per vedere se esiste ogni volta, ecc

VersatileImageField fallisce il primo requisito. ImageKit fallisce il secondo requisito. Il terzo requisito è dove sono più confuso; Sto cercando di informarmi sulle migliori pratiche ma l'informazione è frammentata e non sono sicuro di prendere una decisione basata su ciò che ho imparato finora.

Da quello che ho letto, la mia impressione è che il comportamento più efficace sarebbe la seguente:

  • generare la miniatura immediatamente dopo salvare e assumere esiste sempre
  • per accedere miniature, generare il URL sulla base di nome file e miniatura dimensioni/qualità dell'immagine originale, dal momento che sappiamo che esiste sicuramente
  • post_delete cancellerà tutte le miniature e file originale

Sarei molto interessato a conoscere le differenze negli approcci che le miniature facili e le miniature in miniatura prendono (se si allineano con il processo che ho brevemente delineato sopra o se hanno qualcosa di ancora più efficiente) e i vantaggi/svantaggi in ciascuna delle loro metodologie.

+0

Come hai risolto il problema? – wiesson

+0

@weisson Ho provato tutte e tre queste app, tutte erano imperfette e troppo supponenti (non c'è altro modo per farlo). Sto usando la thumbnailing lato client con pica.js. Il blob dell'immagine viene caricato direttamente su S3, non è necessario alcun ImageField o cuscino. – dtgq

risposta

0

Non sono sicuro che sia utile, ma ho usato miniature facili in passato e sono abbastanza sicuro che faccia tutte le cose che chiedi se lo configuri un po ' . La sua configurazione con la funzione di salvataggio è un po 'complicata, poiché la funzione di salvataggio non si presta a essere configurata, ma non è impossibile. La cosa principale che può causare problemi è che devi usare "salva e continua a modificare" per accedere e utilizzare l'opzione miniatura. Non sarà visibile fino a quando non lo hai già creato da quando è stato creato al salvataggio.

def save() 
    found_id = self.id 
     super(Team, self).save(*args, **kwargs) 
     if self.image and found_id is None and self.original_image_width and self.original_image_height: 
      self.image = get_thumbnailer(self.image).get_thumbnail({ 
       'size': (self.original_image_width, self.original_image_height) 
      }).name 
     super(Team, self).save(*args, **kwargs) 
+0

Potrebbe fornire uno snippet di esempio di codice su come configurare la funzione di salvataggio e su come utilizzare "salva e continua a modificare"? Grazie. – dtgq

+0

Fondamentalmente ciò che accade con "Salva e continua modifica" è che la funzione di salvataggio genera gli URL easy_thumbnails Fondamentalmente si creano opzioni per la larghezza e l'altezza dell'immagine originale, così come per la miniatura e un uploader di immagini e sezione per memorizzare la miniatura nel modello – overstreetce