Frage

Ich bin Bild beschneiden, und es zurückbringen möchten einen Ashx Handler. Die Ernte Code lautet wie folgt:

public static System.Drawing.Image Crop(string img, int width, int height, int x, int y)
    {
        try
        {
            System.Drawing.Image image = System.Drawing.Image.FromFile(img);
            Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            Graphics gfx = Graphics.FromImage(bmp);
            gfx.SmoothingMode = SmoothingMode.AntiAlias;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gfx.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
            // Dispose to free up resources
            image.Dispose();
            bmp.Dispose();
            gfx.Dispose();

            return bmp;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

Die Bitmap zurückgegeben werden, und müssen jetzt das zurück an den Browser über das Kontextstrom senden, wie ich erstellt keine physische Datei möchte.

War es hilfreich?

Lösung

Sie wirklich brauchen nur sie über die Reaktion mit einem entsprechenden MIME-Typ an:

using System.Drawing;
using System.Drawing.Imaging;

public class MyHandler : IHttpHandler {

  public void ProcessRequest(HttpContext context) {

    Image img = Crop(...); // this is your crop function

    // set MIME type
    context.Response.ContentType = "image/jpeg";

    // write to response stream
    img.Save(context.Response.OutputStream, ImageFormat.Jpeg);

  }
}

Sie können das Format auf eine Reihe von verschiedenen Dingen ändern; überprüfen Sie die Enum.

Andere Tipps

Ein besserer Ansatz besteht darin, einen Handler zu verwenden, schreibt die Funktion zu erreichen. Hier ist ein Tutorial, das Bild von Query-String und hier ist ein MSDN-Artikel zum Thema.

Schreiben Sie die Bitmap auf Ihrem Antwortstream (und stellen Sie den richtigen MIME-Typ)

Könnte eine Idee sein, zu wandeln es in png / jpg zu reduzieren sice auch ist

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