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 Programação Pular para comentários
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. 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:
http://www.oficinadanet.com.br//imagens/coluna/2473//1.gif

Copie:


Para IIS 7 ou superior é necessário adicionar na chave system.webServerhandlers
http://www.oficinadanet.com.br//imagens/coluna/2473//2.gif

Copie:


Agora vamos testar:

Sem redimensionar:
http://www.oficinadanet.com.br//imagens/coluna/2473//3.gif


Redimensionando:
http://www.oficinadanet.com.br//imagens/coluna/2473//4.gif


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

Compartilhe com seus amigos:
Mais sobre: .net, asp.net, imagens
Leonardo Hofling
Leonardo Hofling Desenvolvedor - C#, Java, Swift, Object, Delphi, Php
FACEBOOK //
Quer conversar com o(a) Leonardo, comente:
Carregar comentários
Últimas notícias de Programação
  • Google usa Mulher-Maravilha para ajudar meninas a programar

    Google usa Mulher-Maravilha para ajudar meninas a programar

    Meninas ganham um incentivo extra na hora de aprender a programar, a Mulher-Maravilha.

  • Criando um cadastro de usuário em Java

    Criando um cadastro de usuário em Java

    O objetivo deste artigo é desenvolver uma aplicação em JSE (Java Standard Edition) de inserção de dados utilizando alguns padrões de projeto.

  • Quer aprender PHP? Saiba mais

    Quer aprender PHP? Saiba mais

    Chegou o tão aguardado curso online de PHP do Oficina da Net. Você não pode perder. PHP é uma das linguagens mais usadas no mundo. Os conteúdos que vou mostrar no curso, são exatamente o que você precisa saber para iniciar sua carreira como programador.

  • Formulário de contato em php

    Formulário de contato em php

    Guia do PHP: Aprenda a fazer um formulário em PHP que envia via SMTP autenticado o e-mail para um destinatário.

  • Como fazer um GIF?

    Como fazer um GIF?

    Aprenda a criar um GIF animado de vídeos. Descubra como criar os GIFs, imagens animadas que você vê em na internet.

  • O que priorizar na hora de escolher o hosting para seu site?

    O que priorizar na hora de escolher o hosting para seu site?

    Com o crescimento das ofertas na web, saiba o que você deve levar em consideração na hora de escolher a melhor empresa de hosting para seu empreendimento

  • O que preciso fazer para criar um aplicativo?

    O que preciso fazer para criar um aplicativo?

    Temos visto que desenvolver aplicativos que visam o mercado mobile pode ser mais que uma alternativa rentável, pode colocá-lo no topo, deixá-lo rico. Mas nem tudo são flores, e o aspirante a desenvolvedor de app precisa seguir algumas regras.

  • WEBINAR 3.9

    WEBINAR 3.9

    Venha para o Maker e descubra como tornar o seu negócio mais competitivo.