O .NET Framework fornece uma série de classes, que estão contidas dentro da DLL System.Drawing.dll (Namespace System.Drawing) para a manipulação de imagens. Utilizaremos algumas dessas classes para isso, mas antes de efetivamente entrarmos nesta análise, vamos entender a forma que vamos dispor isso ao usuário. Primeiramente vamos criar uma classe chamada GenerateDynamicImage que implmentará a interface IHttpHandler, e consequentemente vamos adicioná-la no arquivo Web.Config para que a mesma possa interpretar as requisições efetuadas à ela, que gerará a imagem do texto que vamos informar.
Abaixo é exibida o código da classe:
using System.Web; using System.Drawing; using System.Drawing.Text; using System.Drawing.Imaging; public class GenerateDynamicImage : IHttpHandler { public void ProcessRequest(HttpContext context) { //.... string text = context.Request.QueryString["Text"]; if(text != string.Empty){ Bitmap bmp = null; Graphics graphic = null; try { bmp = new Bitmap(200, 30); graphic = Graphics.FromImage(bmp); graphic.Clear(Color.LightBlue); graphic.DrawString(text, new Font("Verdana", 14, FontStyle.Bold), Brushes.Black, 3, 3); context.Response.ContentType = "image/GIF"; bmp.Save(context.Response.OutputStream, ImageFormat.Gif); } catch{} finally{ if(graphic != null) graphic.Dispose(); if(bmp != null) bmp.Dispose(); } } } } |
Como podemos reparar, a classe implementa a interface IHttpHandler e através do método ProcessRequest recuperamos o string que será escrita através da QueryString (fornecida pelo HttpContext que é passado como parâmetro) e, através das classes Bitmap e Graphics configuramos a imagem, ajustando a cor, fonte, tamanho, etc., e mudamos o ContentType da requisição para que o ouput seja em formato de imagem. Finalmente, através da propriedade OutputStream, salvamos a imagem neste Stream que é enviado ao cliente.
Depois desta classe pronta, resta registrá-la no arquivo Web.Config da aplicação na seção de httpHandlers, como é mostrado abaixo:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <httpHandlers> <add verb="*" path="GenerateImage.ashx" type="WebApplication1.GenerateDynamicImage, WebApplication1"/> </httpHandlers> </system.web> </configuration> |
Finalmente para testarmos esse handler, criarmos uma página ASPX e colocamos nela um controle Label, TextBox, Button e um do tipo Image. No evento Click do Button adicionaremos o seguinte código:
this.Image1.ImageUrl = string.Concat("GenerateImage.ashx?Text=", this.TextBox1.Text.Trim()); |