How to Create Text Image on the fly with ASP.NET

來源:互聯網
上載者:User

摘至:http://www.codeproject.com/aspnet/createTextImage.asp
<PRE lang=cs id=pre0 style="MARGIN-TOP: 0px; DISPLAY: block"><%@ Page Language="C#" trace="false" Explicit="true" aspcompat="true" Debug="true" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Text" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>

<script runat="server">
//-------------------------------------
// fonter.net v1.0
//-------------------------------------
// Text Images On the Fly using ASP.Net
// Written in C# and GDI+ library
//-------------------------------------
// (C) Zeddy Iskandar, 2003-onwards.
// Provided as-is, author is not
// responsible for anything.
//-------------------------------------

public void Page_Load(object sender, System.EventArgs e)
{
   if (Request.HttpMethod == "POST")
   {
    string text = Request.Form.Get("text");
    int textLength = text.Length;
    int fontSize = Convert.ToInt32(Request.Form.Get("fontsize"));
    int orientation = Convert.ToInt32(Request.Form.Get("orientation"));
    int antialias = Convert.ToInt32(Request.Form.Get("antialias"));

    // Set canvas width & height
    int width;
    int height;
    if (orientation == 1)
    {
     width  = (fontSize * textLength) - ((textLength * fontSize)/3);
     height = fontSize + 20;
    }
    else
    {
     width  = fontSize + 20;
     height = (int)(fontSize * textLength * 1.5);
    }

    // Initialize graphics
    RectangleF rectF =new RectangleF(0, 0, width, height);
    Bitmap pic = new Bitmap(width, height, PixelFormat.Format24bppRgb);
    Graphics g = Graphics.FromImage(pic);
    g.SmoothingMode = SmoothingMode.AntiAlias;
    if (antialias == 1) g.TextRenderingHint = TextRenderingHint.AntiAlias;

    // Set colors
    string fgColor = Request.Form.Get("fontcolor");
    string bgColor = Request.Form.Get("bgcolor");
    Color fontColor = Color.FromName(fgColor);
    Color rectColor = Color.FromName(bgColor);
    SolidBrush fgBrush = new SolidBrush(fontColor);
    SolidBrush bgBrush = new SolidBrush(rectColor);

    // Rectangle or ellipse?
    int bound = Convert.ToInt32(Request.Form.Get("bound"));
    if (bound == 1)
    {
     g.FillRectangle(bgBrush, rectF);
    }
    else
    {
     g.FillRectangle(new SolidBrush(Color.White), rectF);
     g.FillEllipse(bgBrush, rectF);
    }

    // Load font
    string fontName = Request.Form.Get("fontname") + ".ttf";
    PrivateFontCollection privateFontCollection = new PrivateFontCollection();
    privateFontCollection.AddFontFile(Server.MapPath("./") + fontName);
    FontFamily fontFamily = privateFontCollection.Families[0];

    // Set font style
    int fontStyle = Convert.ToInt32(Request.Form.Get("fontstyle"));
    FontStyle style = FontStyle.Regular;
    switch (fontStyle)
    {
     case 2:
      style = FontStyle.Bold;
      break;

     case 3:
      style = FontStyle.Italic;
      break;

     case 4:
      style = (FontStyle.Bold) | (FontStyle.Italic);
      break;

     case 5:
      style = FontStyle.Strikeout;
      break;

     case 6:
      style = FontStyle.Underline;
      break;
    }
    Font font = new Font(fontFamily, fontSize, style, GraphicsUnit.Pixel);

    // Set font direction & alignment
    StringFormat format = new StringFormat();
    int reverse = Convert.ToInt32(Request.Form.Get("reverse"));
    if (reverse == 1 && orientation == 1)
    {
     format.FormatFlags = StringFormatFlags.DirectionRightToLeft;
    }
    else if (reverse == 1 && orientation > 1)
    {
     StringBuilder temp = new StringBuilder();
     for (int i = textLength-1; i >= 0; i--)
     {
      temp.Insert((textLength-1) - i, text[i]);
     }
     text = temp.ToString();
    }
    if (orientation > 1)
    {
     rectF.X = width/4;
     rectF.Width = fontSize - (fontSize/4);
    }
    int alignment = Convert.ToInt32(Request.Form.Get("alignment"));
    if (alignment == 1)
    {
     format.Alignment = StringAlignment.Near;
    }
    else if (alignment == 2)
    {
     format.Alignment = StringAlignment.Center;
    }
    else
    {
     format.Alignment = StringAlignment.Far;
    }
    format.LineAlignment = StringAlignment.Center;

    // Draw any drop-shadow
    int dropShadow = Convert.ToInt32(Request.Form.Get("dropshadow"));
    if (dropShadow > 0)
    {
     Color shadowColor = Color.FromName(Request.Form.Get("shadowcolor"));
     switch(dropShadow)
     {
      case 1:
       rectF.Offset(-3, -3);
       g.DrawString(text, font, new SolidBrush(shadowColor), rectF, format);
       rectF.Offset(+3, +3);
       break;

      case 2:
       rectF.Offset(+3, -3);
       g.DrawString(text, font, new SolidBrush(shadowColor), rectF, format);
       rectF.Offset(-3, +3);
       break;

      case 3:
       rectF.Offset(-3, +3);
       g.DrawString(text, font, new SolidBrush(shadowColor), rectF, format);
       rectF.Offset(+3, -3);
       break;

      case 4:
       rectF.Offset(+3, +3);
       g.DrawString(text, font, new SolidBrush(shadowColor), rectF, format);
       rectF.Offset(-3, -3);
       break;
     }
    }

    // Finally, draw the font
    g.DrawString(text, font, fgBrush, rectF, format);
    Response.ContentType = "image/jpeg";
    pic.Save(Response.OutputStream, ImageFormat.Jpeg);

    // Dispose objects
    pic.Dispose();
   }
   else
   {
    Response.ContentType = "text/html";
    Response.Write("<html><body>");
    Response.Write("fonter.net v1.0 <br> Create Text Images On-the-Fly <br>");
    Response.Write("(C)2003-onwards, Zeddy Iskandar");
    Response.Write("</body></html>");
   }
}
</script></PRE>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.