Cached Text To Image Handler

Cached Text To Image Handler

Tue, 24 Nov 2009 05:45:45 GMT Posted by mfalac

demo aspx

<cc2:GeneratedImage ID="GeneratedImage1" runat="server"
    ImageHandlerUrl="CachedTextToImageHandler.ashx" Height="36px">
                <Parameters>
                    <cc2:ImageParameter Name="Message" Value="GeneratedImage Control Demos" />
                    <cc2:ImageParameter Name="Font" Value="Verdana" />
                    <cc2:ImageParameter Name="Bold" Value="True" />
                    <cc2:ImageParameter Name="FontSize" Value="28" />
                    <cc2:ImageParameter Name="FontColor" Value="#003399" />
                    <cc2:ImageParameter Name="BackColor" Value="#8CA8E6" />
                    <cc2:ImageParameter Name="HorizontalPadding" Value="0" />
                </Parameters>
            </cc2:GeneratedImage>

Protected Sub btnRefreshImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefreshImage.Click
       CachedTextAsImageGenerator.Parameters.Clear()

       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "Message", .Value = txtMessage.Text})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "Font", .Value = ddlFont.SelectedValue})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "FontSize", .Value = ddlFontSize.SelectedValue})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "FontColor", .Value = ddlFontColor.SelectedValue})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "BackColor", .Value = ddlBackColor.SelectedValue})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "HorizontalPadding", .Value = ddlHorizontalPadding.SelectedValue})
       CachedTextAsImageGenerator.Parameters.Add(New ImageParameter() With {.Name = "VerticalPadding", .Value = ddlVerticalPadding.SelectedValue})
   End Sub

<%@ WebHandler Language="VB" Class="CachedTextToImageHandler" %>

Imports System
Imports System.Drawing
Imports System.Web
Imports Microsoft.Web

Public Class CachedTextToImageHandler
    Inherits ImageHandler

    Public Sub New()
        MyBase.ContentType = Imaging.ImageFormat.Png
        MyBase.EnableServerCache = True
    End Sub
    Public Overrides Function GenerateImage(ByVal parameters As System.Collections.Specialized.NameValueCollection) As Microsoft.Web.ImageInfo
        Dim Message As String = "Message parameter not set!"
        If Not String.IsNullOrEmpty(parameters("Message")) Then
            Message = parameters("Message")
        End If
        Dim FontStyle As FontStyle = FontStyle.Regular
        If Not String.IsNullOrEmpty(parameters("Bold")) Then
            FontStyle = FontStyle Or Drawing.FontStyle.Bold
        End If
        If Not String.IsNullOrEmpty(parameters("Italic")) Then
            FontStyle = FontStyle Or Drawing.FontStyle.Italic
        End If
        If Not String.IsNullOrEmpty(parameters("Underline")) Then
            FontStyle = FontStyle Or Drawing.FontStyle.Underline
        End If
        If Not String.IsNullOrEmpty(parameters("Strikeout")) Then
            FontStyle = FontStyle Or Drawing.FontStyle.Strikeout
        End If
        Dim Font As New Font("Verdana", 14)
        If Not String.IsNullOrEmpty(parameters("Font")) AndAlso Not String.IsNullOrEmpty(parameters("FontSize")) Then
            Font = New Font(parameters("Font"), Convert.ToInt32(parameters("FontSize")), FontStyle)
        End If
        Dim FontColor As Color = Color.Black
        If Not String.IsNullOrEmpty(parameters("FontColor")) Then
            FontColor = ColorTranslator.FromHtml(parameters("FontColor"))
        End If
        Dim BackColor As Color = Color.White
        If Not String.IsNullOrEmpty(parameters("BackColor")) Then
            BackColor = ColorTranslator.FromHtml(parameters("BackColor"))
        End If
        Dim HorizontalPadding As Integer = 5
        If Not String.IsNullOrEmpty(parameters("HorizontalPadding")) Then
            HorizontalPadding = Convert.ToInt32(parameters("HorizontalPadding"))
        End If
        Dim VerticalPadding As Integer = 5
        If Not String.IsNullOrEmpty(parameters("VerticalPadding")) Then
            VerticalPadding = Convert.ToInt32(parameters("VerticalPadding"))
        End If
        Return CreateImage(Message, Font, FontColor, BackColor, HorizontalPadding, VerticalPadding)
    End Function
    Protected Function CreateImage(ByVal Message As String, ByVal Font As Font, ByVal FontColor As Color, ByVal BackColor As Color, ByVal HorizontalPadding As Integer, ByVal VerticalPadding As Integer) As Microsoft.Web.ImageInfo
        Dim sz As SizeF = Nothing
        Using dummyBitmap As New Bitmap(1, 1)
            Dim dummyGraphics As Graphics = Graphics.FromImage(dummyBitmap)
            sz = dummyGraphics.MeasureString(Message, Font)
        End Using
        Dim realBitmap As New Bitmap(Convert.ToInt32(sz.Width) + HorizontalPadding * 2, Convert.ToInt32(sz.Height) + VerticalPadding * 2)
        Dim realGraphics As Graphics = Graphics.FromImage(realBitmap)
        realGraphics.Clear(BackColor)
        realGraphics.DrawString(Message, Font, New SolidBrush(FontColor), HorizontalPadding, VerticalPadding)
        Return New ImageInfo(realBitmap)
    End Function
End Class

Image Resize