Domanda

Vorrei creare dinamicamente le miniature in base ai parametri nell'URL. Ad esempio, http://mysite.com/images/1234/120x45.jpg creerebbe una miniatura 120x45 per un'immagine ID 1234.

La soluzione ovvia a questo è di avere una visione Django che esegue le seguenti:

  1. Cercare una versione precedentemente memorizzata nella cache delle immagini in questa dimensione.
  2. Creare una miniatura se non è memorizzato nella cache (una certa logica per il blocco in modo che solo 1 processo crea la miniatura e altri processi attendere).
  3. Tubo i risultati attraverso Django.

Questo dovrebbe "lavoro", ma sono preoccupato per le prestazioni. Non mi piace l'idea di usare Django per servire contenuti statici. Quali sono alcuni altri modi per ottenere questo problema?

È stato utile?

Soluzione

Non è necessario usare Django per servire direttamente il contenuto statico. Basta avere il vostro percorso server di 404 richieste per le vostre immagini cartella a una visualizzazione Django, dove si divide a parte il nome del file e genera la miniatura del caso, prima di reindirizzare all'URL originale (che si spera non sarà più un 404).

Per quanto riguarda il suggerimento django-imagekit dell'altra risposta, io non sono sicuro che lo fa di tutto per farvi in modo dinamico generare pollici di immagini basate su URL, ma certamente vi consiglio di utilizzarlo per tutte le caratteristiche che deve avere.

Modifica

Per quanto riguarda la struttura degli URL attuale, mi sento un /images/filename-120x45.jpg più tipico permetterebbe di filtrare più facilmente fuori 404 richieste che non hanno nulla a che fare con la generazione delle miniature dinamica. Diciamo, per esempio, che ci sono tonnellate di 404 errori per /images/original_size_image.jpg. Lei non vorrebbe coloro che vengono instradati a Django, e si può abbinare solo i nomi di file di questo formato con espressioni regolari. [modifica fine]

Bisogna stare attenti però di lasciare qualcuno a conoscenza di questa funzione di spam tua app Django. Essi potrebbero potenzialmente ucciderlo con un numero infinito di combinazioni di dimensioni delle immagini e nomi di file a portata di mano. Si avrebbe bisogno di capire come mettere limiti superiori su queste richieste, come il reindirizzamento di nuovo ad un 404 se uno dei due dimensione è più grande dell'originale, o anche capire come cap richieste di dimensioni multiple della stessa immagine. Forse questo era quello che vuoi arrivare quando si citano "blocco", anche se.

Per inciso, vedo che hai codificato Apache, ma mi piacerebbe davvero raccomandare che si servono contenuti statici attraverso qualcosa di simile Nginx . Si potrebbe forse negare il sovraccarico delle richieste di immagini dinamiche, se si utilizza un file server statico che non è completa schifezza a servire i file statici.

Altri suggerimenti

Si può anche provare SORL , esso è utilizzato da Satchmo .

Vedere questa applicazione per generare pollici.

Sviluppato in Python, utilizzando server di tornadoweb.

https://github.com/globocom/thumbor

pip install thumbor

Gran Application

Ho guardato queste risposte e, anche se lavoro che stavano semplicemente troppo sofisticate per me. Se si desidera solo un modo rapido e sporco per ottenere le miniature, usando solo la libreria PIL potrebbe essere una buona chiamata, questo è il mio codice:

file, ext = os.path.splitext('image.jpg')
im = Image.open('/full/path/to/image.jpg')
im.thumbnail(size, Image.ANTIALIAS)
thumb_path = os.path.join('/full/path/to/thumb/dir/', file + ".thumb" + ".jpeg")
im.save(thumb_path)

Scarica la libreria PIL qui

Saluti, spera che questo aiuta qualcuno.

È possibile dare uno sguardo a il SORL-thumbnail documentazione . Io lo uso in quasi tutti i miei progetti insieme a servire contenuti statici con Nginx dalla dir /media/:)

Guarda discussione su contributo delle miniature per Django:

https://code.djangoproject.com/wiki/ThumbNails

Ho avuto lo stesso problema esatto: in un sito ad alto traffico, generando decine di miniature al tempo di risposta non è fattibile, come sta generando miniature per tutti i contenuti passato, in batch, in modo ho creato un app per questo. Check it out: https://github.com/hcarvalhoalves/django-rest-thumbnails

Thumbor è davvero un grande servizio, è possibile utilizzare django-thumbor su Django.

pip install django-thumbor

Repo qui: https://github.com/ricobl/django-thumbor

Si può solo bisogno di ridimensionare l'immagine sullo schermo, in base alla dimensione specificata è necessario, su richiesta. La biblioteca Django Imagefit fa esattamente questo, e dà anche la possibilità di ritagliare.

Nel tuo esempio si può scrivere {{ 'http://example.com/images/1234.jpg'|resize:'120x45' }} e si finirebbe un'immagine di 120x45 dimensioni con.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top