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.

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:

<a href="https://i1.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2015/06/11.gif” data-rel="lightbox-image-0” data-rl_title=”” data-rl_caption=”” title="“>

Copie:

<add verb=”*” path=”*.jpg” type=”ImagemHandler”/>

Para IIS 7 ou superior é necessário adicionar na chave system.webServerhandlers

<a href="https://i2.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2015/06/21.gif” data-rel="lightbox-image-1” data-rl_title=”” data-rl_caption=”” title="“>

Copie:

<add name=”ImagemHandler” verb=”*” path=”*.jpg” type=”ImagemHandler”/>

 

A função também aceita que seja passado somente um parâmetro apenas.

Até a próxima!