Frage

wir eine Datenbank von Bildmedien in großem Maßstab Webapplikation sind maintaing. Die hochauflösenden JPGs sind groß (> 15 MB) und nicht muss zum Herunterladen in irgendeiner Art und Weise zur Verfügung gestellt werden. Jetzt brauchen wir Zugang zu den Einzelheiten (Kulturen) der Bilder zu den Kunden zur Verfügung zu stellen (wie eine Zoom-Funktion). Der Kunde sollte eine downskaled Version des Bildes sehen und in der Lage, einen Bereich wählen es im vollen Umfang Modus (100%) betrachtet werden.

Wie könnte dies auf die performante Art und Weise (Verkehr und CPU-weise) umgesetzt werden? Wir sind offen für jede Lösung, solange die hochauflösende Bilddatei geschützt bleibt. Die Anwendung ist in c # entwickelt und .NET Framework 3.5.

Irgendwelche Ideen? Vielen Dank im Voraus!

War es hilfreich?

Lösung

Das erste, was müssen Sie tun, ist zu komprimieren und die Bilder Wasserzeichen, bevor sie an den Server hochladen. präsentieren dann diejenigen an den Benutzer. Dadurch werden die am wenigsten CPU-Ressourcen nehmen, da sie Bilder statisch sein werden.

Ich persönlich würde dann die Bilder für die in voller Größe Versionen beschneiden und ihnen die komprimierten diejenigen an der Seite setzen. Auf diese Weise kann der Kunde einen Blick auf das Gesamtbild hat (wenn auch komprimiert und mit Wasserzeichen) an der Seite eine kleine Probe der Voll hallo-res Version.

Sie wollen wahrscheinlich on-the-fly Bildbearbeitung zu vermeiden, wenn Sie eine geringe Anzahl von Kunden und einen sehr bulligen Server haben.

Andere Tipps

würde ich eine Low-Res-Version des Bildes an den Browser dienen und eine Clientseite Ernte ui hava, die dann eine Anforderung zurück an den Server senden würden, die die Auswahl beschneiden werden und es wieder in hohen Auflösung senden.

Wie ich zu meinem Vater sagen (das nicht verstehen, wie das Internet funktioniert), wenn Sie es auf einer Webseite sehen können, können Sie es speichern können, es ist nur eine Frage, wie es zu tun.

Es ist eine Ajax-Version von Deep Zoom dass Du - Siehe Dragon:

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

Der Benutzer mit einer low-res Version des Bildes dargestellt wird; sie können dann auf einem beliebigen Teil davon vergrößern, dass sie wollen.

Als erstes würde ich vorrendern mit Wasserzeichen versehene Versionen aller Bilder in voller Größe sie in einem komprimierten Dateiformat sowie vorgerenderter low res Versionen zu speichern.

Ich würde die niedrige Auflösung Bilder für die Suche dienen. Dann wird das mit Wasserzeichen versehene hochauflösende Bild für den Benutzer ihre Zuschneiden einzurichten.

An der Stelle der Bestätigung ich einen zweiten dedizierten Bildverarbeitungsserver haben würde, die das Nicht-Wasserzeichen versehenes Bild beschnitten, übergab das beschnittene Bild auf den Webserver, die es an den Client gesendet.

Dass gesagt wird, wäre es immer noch möglich sein, ein Client-seitiges Script zu erstellen, die die abgeschnittenen Teile Zucht- und vernäht sie zusammen eine volle Größe Kopie der Bilder ohne Wasserzeichen zu erstellen.

  

darf nicht zur Verfügung gestellt werden   Download in keiner Weise.

steht im Widerspruch zu:

  

Der Kunde sollte eine downskaled sehen   Version des Bildes und der Lage sein,   wählen Sie einen Bereich davon in zu betracht   der vollen Skala-Modus (100%).

... an der Stelle, alle Bereiche des Bildes zu ermöglichen bei voller Auflösung betrachtet werden, könnte das gesamte Bild zusammengenäht werden. Sie sind also effektiv (wenn auch sehr unbequeme) machen das Bild in voller Größe zur Verfügung.

nichts hilft Ihnen auch wenn das Ziel zu erreichen.

So wie ich es bei der Auswahl des Bereichs des Bildes einen 72dpi mit Wasserzeichen versehene Kopie für die Verwendung zur Verfügung zu stellen wäre tun würde zum Download bereit. Sie könnte dies zu einer% des ursprünglichen skaliert, wenn Bildschirm Immobilien ein Problem war. hat der Benutzer oben links und unten rechts Koordinaten wählen. dann so etwas wie ImageMagick verwenden Sie diesen Bereich aus dem Original für den Benutzer bedient werden zu kopieren.

Wenn Sie Ressourcen schonen müssen, könnten Sie die Benutzer herunterladen haben aus einem vorgegebenen Raster, so dass das erste Zeitraster coord 14.11 gewählt wird, wird image_1411_crop.jpg in das Dateisystem geschrieben, und das nächste Mal, dass coord ausgewählt, existiert die Datei bereits.

Bearbeiten einige Ihrer Kommentare zu anderen Antworten lesen ...

, egal welche Art und Weise Sie gehen über die Erzeugung und server Caching, Sie gehen die gleiche Menge an Bandbreite und Datenverkehr verwenden. ein 300dpi JPEG ist ein 300dpi JPEG egal ob es gerade erzeugt worden ist oder auf dem Dateisystem sitzt.

Sie müssen herausfinden, ob Sie die CPU oder Speicherplatz sparen müssen. wenn Sie schon eine Million Gigs von Bildern und nur vierzig Benutzer haben, können Sie den CPU-Hit leisten. wenn Sie vierzig Konzerte von Bildern und eine Million Benutzer haben, gehen Sie für die Festplatte.

Ich würde verwenden S3 für die Lagerung. Erstellen Sie zwei Eimer (öffentlich geschützt), geben url die Bilder des geschützten Eimer, sobald Sie den Benutzer autorisiert haben, um sie herunterzuladen. S3 Urls kann mit einem Ablaufdatum gemacht geruhsame werden.

Mit 15Mb Bilder werden Sie erkennen wahrscheinlich, dass Sie benötigen die skalierte / beschnittene Version vor der Zeit im Voraus zu erzeugen.

würde ich ein Wasserzeichen von einer Art auf alle verwenden, aber die Originaldatei. (Wie Google Maps)

[Edit: Hinzugefügt Deep Zoom zum Zoomen]

Überprüfen Sie heraus Silverlight Deep Zoom für die croping Verwaltung und Zoomen ( Demo ). Sie haben sogar einen Dienstprogramm rel="nofollow alle beschnittenen Bilder zu erzeugen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top