Domanda

Sto creando un social network in cui gli utenti caricano la loro immagine del profilo.

Questa immagine verrà utilizzata nella loro pagina del profilo in dimensione 150/150 px.

Nella home page I.E Feed Attività utente Ho bisogno della stessa immagine in 75/75 px.

Quali sarebbero le migliori pratiche per fare questo

    .
  1. ridimensiona l'immagine su Fly (Timthumb).
  2. Ridimensiona e salva l'immagine nel server.
È stato utile?

Soluzione

Durante il caricamento di una foto crea una serie richiesta di miniature e salva come [image_name] thumb [size_name] .jpg o così:

uploaded: file.jpg
medium: file_thumb_150x150.jpg
small: file_thumb_75x75.jpg
.

La convenzione di denominazione dipende da te, ma in un modo veloce si ottiene un facile accesso ai dati di cui hai bisogno.Non è necessario utilizzare il server per generarlo al volo o alla scala in un browser.

Altri suggerimenti

Ho lavorato su questo problema per un po 'e ho incontrato 3 modi principali per farlo:

    .
  1. Genera immagini in miniatura nel punto di caricamento come processo di sfondo.
  2. Genera immagini su richiesta attraverso l'applicazione principale
  3. Genera immagini su richiesta usando l'URL come API

    Ogni approccio ha i suoi pro e contro.

      .
    1. Questo approccio è il più restrittivo, devi conoscere tutti gli usi e le dimensioni delle miniature in avanti in modo da poterli generare immediatamente dopo il caricamento. Il vantaggio principale è che le immagini possono essere servite in modo efficiente utilizzando un server come Nginx e sono come altre risorse statiche.
    2. Django ha una biblioteca chiamata Sorl-Thumbnail che fornisce un tag modello per generare miniature di tutti i tipi come e quando sono necessarie. Utilizza un negozio di tasti / valori veloci per tenere traccia di quali miniature sono state generate e invalida automaticamente le immagini generate stantio se rileva automaticamente l'immagine di origine. Il tag del modello restituisce quindi l'URL per l'immagine generata, che può essere servita direttamente da nginx senza passare attraverso uno strato di scripting. Più flessibile di 1, ma non è possibile (ad esempio) generare un URL dell'immagine utilizzando JavaScript e aspettarsi che esista, deve essere fatto dal codice di back-end o dai modelli del sito web.
    3. Completamente dinamico e flessibile, puoi ottenere qualsiasi versione dell'immagine che desideri semplicemente modificando l'URL, Amazon utilizza questo metodo come tutti i siti Web di generazione di immagini segnaposto. Può generare gli URL in JavaScript e fai tutte le cose fantastiche che vuoi. Il sito web in sé non ha bisogno di alcuna conoscenza dello strato di miniatura a corto di forse alcuni metodi helper per generare gli URL per te. Ma questo è ovviamente il modo più intensivo di risorse per fare le cose e devi assicurarti che la tua architettura possa gestire il carico. È necessario utilizzare ogni trucco nel libro per invalidare la cache in modo tempestivo, evitare colpi non necessari sullo script di ridimensionamento ecc.

      Sono un grande fan del 3 ° modo di fare le cose, mi piace la generazione di immagini per essere completamente isolata dalla mia funzionalità principale del sito web e mi piace la notevole flessibilità, ma devi sapere cosa stai facendo quando si tratta per configurare i server per gestirlo.

Ti dico cosa faccio.Consiglio sempre l'immagine a dimensione intera, ma la rinominarlo USSing l'ID DB con gli zeros principali.Sul primo utilizzo creo la miniatura e lo memorizza in un'altra cartella, usandola nelle prossime chiamate.

Se il server Spazio e la larghezza di banda è un problema che dovresti prendere in considerazione l'utilizzo di un CDN.

Amazon ha un buon servizio,

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