Laden Sie ein Bild mit geringer Auflösung und progressive Belastung mit hoher Auflösung
Wie zeige ich ein Bild mit niedriger Auflösung auf eine Seite und dann nach einer Sekunde Verzögerung laden Sie eine hochauflösende version? Das geht mit Ebenen? Threads?
- Wir brauchen mehr Informationen. Sprechen Sie über Vanille-Objektive-C Anwendung? Oder eine HTML-Seite? Sie haben die Kontrolle über die Bilddaten auf dem server?
- cocoa-touch - ipad - /iphone-Anwendung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, dieser Beitrag ist alt, aber nur für den Fall, dass jemand nach ihm sucht, gibt es ein Projekt namens NYXImagesKit das tut, was Sie suchen.
Es wurde eine Klasse mit dem Namen
NYXProgressiveImageView
ist eine Unterklasse vonUIImageView
.Alles, was Sie tun müssen, ist:
Auch eine gute option, um speichern Sie Ihre Bilder als
interlaced
so, dass es Lasten mit geringer Qualität und zu verbessern, mit dem download. Wenn das Bild normal ist, ist es von oben nach unten geladen.Gibt es mehrere Optionen:
1) Speichern Sie die Bilder auf dem server in einem format, das unterstützt den progressiven download (progressive JPEG -, interlaced PNG). Ich denke, Sie hätte zu kommen mit einer besonderen Unterstützung auf dem client, ie. schreiben Sie die Bild-Dekodierung Teil von PNG/JPEG zu
UIImage
sich, vermutlich mit einige Bibliothek.2) Speichern Sie ein kleines Miniaturbild auf jedem Bild auf dem server. Wenn Sie ein Bild downloaden möchten, würden Sie zuerst laden Sie die Miniaturansicht, eine einfache Skalierung zu Strecken, um die volle Bild-Größe und in der Zwischenzeit, laden Sie die Vollversion. Es können mehrere thumbnails in verschiedenen Größen wenn Sie wirklich wollen, bekommen Lust. Sie haben mehr Daten auf den server, aber der client-code sollte ziemlich einfach sein.
3) Vielleicht haben Sie ja die Miniaturansichten auf dem client? In diesem Fall können Sie Strecken Sie die Miniaturansicht, um die volle Bildgröße zu erstellen, die eine low-resolution-version, während Sie laden den rest.
Und wenn Sie Fragen, wie genau der code der zweiten oder Dritten Lösung... die Sie nicht wirklich brauchen explizite threads und ich bin mir nicht sicher, was bedeutet "Schicht" in diesem Kontext bedeuten. Laden einer
UIImage
vom Netzwerk ist ziemlich einfach, ein bisschen wie diese:Können Sie drehen Sie diesen code in eine Funktion, laden und anzeigen der Miniaturansicht und dann auf laden und zeigt das volle Bild. All dies könnte getan werden,im hintergrund, so dass Sie können etwas tun, während die Daten geladen.
UIImage
auf dem Haupt-thread unsicher ist (wie alle anderenUI*
Klassen), so wie geschrieben, dieser code sollte nicht empfohlen werden. Die Verwendung der asynchronenNSURLConnection
aus dem Haupt-thread ist aber okay.NSURLConnection
statt der plumpen Rückrufe. Laden einerUIImage
im hintergrund-thread ist sicher, ich benutze diesen code selbst.Im Allgemeinen diese Funktion wird erreicht mit dem image-Dateien gespeichert sind, einige interlaced/progessive - Modus. Dies ermöglicht die Anzeige der Anwendung (z.B. browser), um das Bild anzuzeigen nacheinander, beginnend in einer niedrigen Qualität, wie die ersten Stücke von Daten kommen. Je mehr Daten verfügbar sind, desto höher ist die Qualität des Bildes bekommt.
Diese Funktion ist unabhängig von dem web-server. Nur die client-Anwendung ist verantwortlich für die Unterstützung dieses Modus
Diese Website zeigt einige Beispiele.
Es klingt wie Sie das beschreiben so etwas wie die TTPhotoViewController von Three20 (wird in der Facebook iPhone app). Beim ersten start Blick auf ein Bild, es ist einfach eine Miniatur, die hat schon ausgestreckt. Die "high-res" - version wird im hintergrund heruntergeladen, und wenn das download abgeschlossen ist, ersetzt es das vorhandene gestrecktes Bild.
War ich in der Lage zum download mit afnetworking.Ich benutzt den code unten