Pergunta

Estou cortar uma imagem, e deseja devolvê-lo usando um manipulador ashx. O código de culturas é a seguinte:

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

O bitmap está sendo devolvido, e agora precisa enviar de volta para o navegador através da corrente contexto, como eu não quero um arquivo físico criado.

Foi útil?

Solução

Você realmente só precisa enviá-lo sobre a resposta com um tipo MIME apropriado:

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

  }
}

Você pode alterar o formato para uma série de coisas diferentes; basta verificar a enumeração.

Outras dicas

Uma abordagem melhor será para uso escrever uma Handler para realizar a função. Aqui é um tutorial que a imagem retorna de string de consulta e aqui é um artigo do MSDN sobre o tema.

Escreva o bitmap em seu fluxo de resposta (e definir o tipo de mime correto)

Pode ser uma ideia para convertê-lo para png / jpg para reduzi-la de sice demasiado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top