Frage

Ich bin eine regelmäßige Galerie in ASP.NET zu schaffen, aber ich habe wenig Erfahrung mit Erstellung von Thumbnails. Ich kenne die Algorithmen und die GetThumbnailImage Methode, aber mein Problem ist woanders - ich zur Zeit die Bilder angezeigt werden (nur Größe geändert), um die Imagesteuerung. Und das ist der Punkt - ich habe keine Ahnung, wie man das „thumbnailed“ Bild an die ImageUrl Eigenschaft anschließen. Ist es überhaupt möglich ist und wenn ja, wie? Oder soll ich stattdessen eine andere Steuerung verwenden? Vielen Dank für alle Anregungen!

War es hilfreich?

Lösung

können Sie erstellen ein Httphandler, welches Bild-Anforderungen verarbeitet und gibt Thumbnails (oder tut, was Sie auf die Bilder benötigen).

Wenn Sie Grafiken tun Sachen in ASP.NET, bedenken Sie, dass fast alle von System.Drawing ist ein Wrapper für GDI + und thetrefore hält Verweise auf nicht verwalteten Speicher, die ordnungsgemäß entsorgt werden muss (Einsatz die using Anweisung). Dies gilt auch für einfache Klassen wie String etc.

Andere Tipps

Es klingt wie Sie einen Httphandler einrichten müssen, die das verkleinerte Bild erzeugen würde und es wahrscheinlich auch auf der Festplatte zwischengespeichert wird, mit speichern der Vorschau auf jeder Anfrage neu erstellen.

So zum Beispiel:

<asp:ImageButton ID="ImageButton1" ImageUrl="~/ImageHandler.ashx?ImageId=123" runat="server />

Sie hätten dann einen Handler:

namespace MyProject
{
    public class ImageHandler : IHttpHandler
    {
        public virtual void ProcessRequest(HttpContext context)
        {
            // 1. Get querystring parameter
            // 2. Check if resized image is in cache
            // 3. If not, create it and cache to disk
            // 5. Send the image

            // Example Below
            // -------------

            // Get ID from querystring
            string id = context.Request.QueryString.Get("ImageId");

            // Construct path to cached thumbnail file
            string path = context.Server.MapPath("~/ImageCache/" + id + ".jpg");

            // Create the file if it doesn't exist already
            if (!File.Exists(path))
                CreateThumbnailImage(id);

            // Set content-type, content-length, etc headers

            // Send the file
            Response.TransmitFile(path);
        }

        public virtual bool IsReusable
        {
            get { return true; }
        }
    }
}

Sie würden auch diese in web.config bis setzen müssen

<system.web>
    <httpHandlers>
        <add verb="*" path="ImageHandler.ashx" type="MyProject.ImageHandler, MyProject"/>
    </httpHandlers>
</system.web>

Dies sollte ausreichen, um Sie zu erhalten begonnen. Sie müssen die Methode Process modifizieren, um die Miniaturansicht zu erstellen, aber Sie erwähnten bereits dafür gesorgt zu haben. Sie werden auch sicherstellen müssen, dass Sie die Header richtig eingestellt, wenn die Datei in den Browser übertragen.

Http-Handler ist der Weg zu gehen.

Ein weiterer Hinweis auf die Leistung: die Manipulation von Bildern ist teuer in Bezug auf Speicherplatz, die beide aus einem Speicher und CPU-Sicht. Daher die Miniaturansicht von einem Vollbild zu erzeugen, ist etwas, das man nur einmal für jedes volle Bild machen wollen. Die beste Zeit, es zu tun, ist wahrscheinlich zu der Zeit, wo das Bild hochgeladen wird, vor allem, wenn Sie eine Reihe von ihnen auf der gleichen Seite zeigen werden.

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