Domanda

stiamo mantenendo una base di dati di mezzi di immagine in una grande webapplication scala. I file JPG ad alta risoluzione sono grandi (> 15 MB) e non devono essere messi a disposizione per il download in qualsiasi modo. Ora abbiamo bisogno di fornire l'accesso ai dettagli (colture) delle immagini ai clienti (come una funzione di zoom-in). Il cliente deve vedere una versione downskaled dell'immagine e essere in grado di selezionare un'area di esso per essere visualizzato in modalità fondo scala (100%).

Come può essere attuata nel modo più performante (traffico e CPU saggio)? Siamo aperti a qualsiasi soluzione fino a quando il file di immagine ad alta risoluzione rimane protetto. L'applicazione è sviluppata in C # e .NET framework 3.5.

Tutte le idee? Grazie in anticipo!

È stato utile?

Soluzione

Per prima cosa che dovrete fare è comprimere e filigrana le immagini prima di caricare sul server. Poi presentare quelle per l'utente. Questo richiederà risorse della CPU meno dal momento che le immagini saranno statici.

Io personalmente poi ritagliare le immagini per le versioni full size e metterli fianco a quelli compressi. In questo modo il cliente può avere una vista dell'immagine completa (anche se compressa e filigranata) lungo il lato un piccolo campione del pieno ad alta risoluzione versione.

Probabilmente si vuole evitare la manipolazione delle immagini on-the-fly a meno che non si dispone di un basso numero di client e un server molto muscoloso.

Altri suggerimenti

Vorrei servire una versione a bassa risoluzione dell'immagine al browser e Hava un raccolto ui lato client che quindi inviare una richiesta al server che ritagliare la selezione e rinviarlo in alta risoluzione.

Come dico a mio padre (che non capisce come funziona Internet), se si può vedere su una pagina web, è possibile salvarlo, è solo una questione di come farlo.

Non è una versione Ajax di Deep Zoom che ti avrebbe fatto piacere - Vedere Dragon:

http://livelabs.com/seadragon-ajax/gallery/

L'utente viene presentato con una versione a bassa risoluzione dell'immagine; possono poi ingrandire qualsiasi parte di esso che a loro piace.

In primo luogo vorrei pre-renderizzare le versioni in filigrana di tutte le immagini a grandezza naturale salvandoli in un formato di file compresso, così come le versioni pre-renderizzati a bassa risoluzione.

Vorrei servire le immagini a bassa risoluzione per la navigazione. Poi l'immagine ad alta risoluzione della filigranata per l'utente di impostare la loro coltivazione.

Al momento della conferma avrei un secondo server di elaborazione delle immagini dedicato che ritagliata l'immagine non filigranata, passata l'immagine ritagliata al server web che ha inviato al client.

Detto questo, sarebbe ancora possibile, per creare uno script lato client che coltivava le porzioni ritagliate e stiched insieme per creare una copia completa dimensioni dell'immagine non filigranata.

  

non devono essere messi a disposizione per   scaricare in qualsiasi modo.

è in contrasto con:

  

Il cliente dovrebbe vedere un downskaled   versione dell'immagine e essere in grado di   selezionare un'area di esso per essere visualizzato in   la modalità di fondo scala (100%).

... al punto di consentire tutte le aree dell'immagine per essere visualizzati in piena risoluzione, l'intera immagine potrebbe essere cuciti insieme. così sei in modo efficace (se molto scomodo) rendendo l'immagine full size disponibili.

niente di tutto questo aiuta a raggiungere l'obiettivo però.

il modo in cui lo farei sarebbe quella di fornire una copia filigranata 72dpi per l'uso nella selezione dell'area dell'immagine da scaricare. si potrebbe scalare ad un% dell'originale, se bene immobile dello schermo è stato un problema. hanno all'utente di scegliere le coordinate in alto a sinistra e in basso a destra. quindi usare qualcosa come ImageMagick per copiare questa zona fuori dalla originale per essere servito per l'utente.

se avete bisogno di conservare le risorse, si potrebbe avere gli utenti scaricare da una griglia predefinita, quindi la prima volta griglia coord 14:11 è scelto, image_1411_crop.jpg viene scritto nel file system, e la prossima volta che coord è selezionato, il file esiste già.

modifica di leggere alcuni dei vostri commenti su altre risposte ...

non importa quale modo si va sulla generazione e la memorizzazione nella cache lato server, si sta andando ad utilizzare la stessa quantità di larghezza di banda e del traffico. un jpeg 300dpi è un jpeg 300dpi, non importa se è solo stato generato o è seduto sul filesystem.

si deve scoprire se è necessario per risparmiare CPU o spazio su disco. se hai un milione di giga di immagini e solo quaranta utenti, si può permettere il colpo CPU. se hai quaranta giga di immagini e un milione di utenti, andare per l'HDD.

S3 per la conservazione. Creare due secchi (protetto pubblico), dare url alle immagini del secchio protetta una volta che avete autorizzato l'utente a scaricarli. S3 URL possono essere fatta riposante con una data di scadenza.

Con le immagini 15MB è probabile che tu rendi conto che è necessario pre-generare la versione ridotta / ritagliata prima del tempo.

mi piacerebbe utilizzare una filigrana di qualche tipo su tutti, ma il file originale. (Come Google maps)

[Modifica: Aggiunto Deep Zoom per lo zoom]

Scopri Silverlight Deep Zoom per la gestione del croping e lo zoom ( Demo ). Hanno anche un per generare tutte le immagini ritagliate.

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