Return Bitmap Browser dynamisch
-
06-07-2019 - |
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.
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
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