Asp .Net - Redimensionar imagens automaticamente

Para redimensionar a imagem iremos criar um handler que será utilizado para interceptar a imagem antes de ser enviada para o cliente e redimensionar caso seja necessário. Deste modo, caso você crie miniaturas de imagens é um trabalho a menos a fazer.

Por | @oficinadanet Programação

Para redimensionar a imagem iremos criar um handler que será utilizado para interceptar a imagem antes de ser enviada para o cliente e redimensionar caso seja necessário.

Deste modo, caso você crie miniaturas de imagens é um trabalho a menos a fazer. E ao contrário de redimensionar utilizando os parâmetros da tag < img /> ou por CSS, a imagem já vai para o cliente com o tamanho reduzido, diminuindo o consumo de banda.

Um handler é uma classe que herda da interface IHttpHandler.

ImagemHandler.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.IO;

public class ImagemHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        string UrlImagem = context.Request.Url.AbsolutePath;

        int newWidth = 0;
        int newHeight = 0;

	  // Caso tenha sido passado o parâmetro "w" ou ?h? ele irá entra no if.
        if (Int32.TryParse(context.Request.Params["w"], out newWidth) | 
            Int32.TryParse(context.Request.Params["h"], out newHeight))
        {
	    // Carrega na memória a imagem para fazer o redimensionamento
            Image img = Image.FromFile(context.Server.MapPath(UrlImagem));

	    // Calcula os novos valores de altura e largura.
            newWidth = newWidth == 0 ? img.Width : newWidth;
            newHeight = newHeight == 0 ? img.Height : newHeight;

	    // Gera a nova imagem de acordo com o tamanho requisitado.
            Image thumbnailImage = img.GetThumbnailImage(newWidth, newHeight, 
            new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);

	    // Salva a imagem diretamento no buffer de saída do Respose, para o cliente.
            thumbnailImage.Save(context.Response.OutputStream, 
            System.Drawing.Imaging.ImageFormat.Jpeg);
        }
	  // Caso não irá enviar a imagem original.
        else
        {
            context.Response.WriteFile(UrlImagem);
        }
    }

    public bool ThumbnailCallback()
    {
        return true;
    }
}

Todo o nosso código para redimensionar a imagem está na função ProcessRequest. Pegamos os parâmetros "w" e "h" que podem ou não ser passados na URL, desta forma:

http://localhost/minhaimagem.jpg?w=300&h=250

E com esses parâmetros geramos a nova imagem utilizando a função GetThumbnailImage. Esse exemplo só foi testado com o formatdo de imagem JPEG, para utilizar GIF, PNG e outros será necessário desenvolver a função de redimensionamento para tal formato.

Agora é necessário adicionar no Web.Config para que o handler comece a funciona, da seguinte forma:
Asp .Net - Redimensionar imagens automaticamente

Copie:


Para IIS 7 ou superior é necessário adicionar na chave system.webServerhandlers
Asp .Net - Redimensionar imagens automaticamente

Copie:


Agora vamos testar:

Sem redimensionar:
Asp .Net - Redimensionar imagens automaticamente


Redimensionando:
Asp .Net - Redimensionar imagens automaticamente


A função também aceita que seja passado somente um parâmetro apenas.
Até a próxima.

Mais sobre: .net, asp.net, imagens
Share Tweet
DESTAQUESMais compartilhados
Comentários
Continue lendo