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