Вопрос

Я обрезаю изображение и хочу вернуть его с помощью обработчика ashx. Код обрезки выглядит следующим образом:

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;
        }
    }

Растровое изображение возвращается, и теперь нужно отправить его обратно в браузер через поток контекста, поскольку я не хочу, чтобы физический файл создавался.

Это было полезно?

Решение

Вам просто нужно отправить его поверх ответа с соответствующим типом MIME:

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);

  }
}

Вы можете изменить формат на множество разных вещей; просто проверьте перечисление.

Другие советы

Лучшим подходом будет использование написать обработчик для выполнения функции. Здесь - это один учебник, который возвращает изображение из строки запроса и здесь - статья MSDN на эту тему.

Напишите растровое изображение в свой поток ответов (и установите правильный тип MIME)

Может быть, идея преобразовать его в png / jpg, чтобы уменьшить его размер также

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top