`
touchinsert
  • 浏览: 1335666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[转]C#动态生成文字图片

 
阅读更多

本文转自:http://hi.baidu.com/lantis214/blog/item/e53c35fe83a950355d60083f.html

原文如下

--------

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections.Generic;
using System.Text;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}

private string GenerateCheckCode()
{
//int number;
//char code;
string checkCode = String.Empty;

System.Random random = new Random();

Encoding gb = Encoding.GetEncoding("gb2312");
//调用函数产生4个随机中文汉字编码
object[] bytes = CreateRegionCode(6);
//根据汉字编码的字节数组解码出中文汉字
string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));
//输出的控制台
checkCode = str1 + str2 + str3 + str4;
Response.Cookies.Add(new HttpCookie("ValidCode", checkCode));
return checkCode;
}

#region 产生波形滤镜效果
private static object[] CreateRegionCode(int strlength)
{
//定义一个字符串数组储存汉字编码的组成元素
string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
Random rnd = new Random();
//定义一个object数组用来
object[] bytes = new object[strlength];

/*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
for (int i = 0; i < strlength; i++)
{
//区位码第1位
int r1 = rnd.Next(11, 14);
string str_r1 = rBase[r1].Trim();

//区位码第2位
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更换随机数发生器的

//种子避免产生重复值
int r2;
if (r1 == 13)
{
r2 = rnd.Next(0, 7);
}
else
{
r2 = rnd.Next(0, 16);
}
string str_r2 = rBase[r2].Trim();

//区位码第3位
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
int r3 = rnd.Next(10, 16);
string str_r3 = rBase[r3].Trim();

//区位码第4位
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
int r4;
if (r3 == 10)
{
r4 = rnd.Next(1, 16);
}
else if (r3 == 15)
{
r4 = rnd.Next(0, 15);
}
else
{
r4 = rnd.Next(0, 16);
}
string str_r4 = rBase[r4].Trim();

//定义两个字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
//将两个字节变量存储在字节数组中
byte[] str_r = new byte[] { byte1, byte2 };

//将产生的一个汉字的字节数组放入object数组中
bytes.SetValue(str_r, i);
}
return bytes;
}

private const double PI = 3.1415926535897932384626433832795;
private const double PI2 = 6.283185307179586476925286766559;
private System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
{
System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);

// 将位图背景填充为白色
System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);
graph.Dispose();

double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;

for (int i = 0; i < destBmp.Width; i++)
{
for (int j = 0; j < destBmp.Height; j++)
{
double dx = 0;
dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
dx += dPhase;
double dy = Math.Sin(dx);

// 取得当前点的颜色
int nOldX = 0, nOldY = 0;
nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
nOldY = bXDir ? j : j + (int)(dy * dMultValue);

System.Drawing.Color color = srcBmp.GetPixel(i, j);
if (nOldX >= 0 && nOldX < destBmp.Width
&& nOldY >= 0 && nOldY < destBmp.Height)
{
destBmp.SetPixel(nOldX, nOldY, color);
}
}
}
return destBmp;
}
#endregion

private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null)
return;

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 27.0)), 25);
Graphics g = Graphics.FromImage(image);

try
{
//生成随机生成器
Random random = new Random();

//清空图片背景色
g.Clear(Color.White);

//画图片的背景噪音线
for (int i = 0; i < 12; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}

//Font font = new System.Drawing.Font("Arial", 16, (System.Drawing.FontStyle.Bold   System.Drawing.FontStyle.Italic));
Font font = new System.Drawing.Font("楷体_GB2312", 16, (System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);

//画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);

image.SetPixel(x, y, Color.FromArgb(random.Next()));
}

//image = TwistImage(image, true, 3, 1);
//画图片的波形滤镜效果
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}

分享到:
评论

相关推荐

    c#文字生成图片

    "C#文字生成图片"是一个常见的需求,特别是在数据可视化、报告生成、动态文本艺术或验证码生成等场景。本实例将深入探讨如何利用C#来实现这个功能。 首先,我们需要了解C#中的图像处理库。在.NET框架中,System....

    C# 生成文字图片二维码

    本篇文章将详细探讨如何在C#中生成文字图片二维码,并提供相关的源码示例。 一、二维码概述 二维码(Quick Response Code)是一种二维条形码,能够存储更多的信息,包括文字、数字、网址、联系信息等。相比传统的...

    C#动态生成含有图片、图标、表格的Word并保存

    在本示例中,我们探讨的是如何利用C#来动态地生成包含多种元素的Word文档,如文字、图片、表格和图标,并将其保存到本地系统。这个过程涉及到了Microsoft的Open XML SDK或者第三方库如NPOI等。 首先,让我们了解...

    C#文字转透明背景图片

    而在某些应用场景下,比如制作图标、Logo或是为了美观的需求,我们常常希望这些文字图片具有透明背景。在.NET框架中,利用C#语言可以非常方便地实现这一功能。 #### 关键知识点分析 1. **创建透明背景的位图**:在...

    C# 生成二维码源码 可生成图片 底部可显示文字

    本文将详细解析标题为“C# 生成二维码源码 可生成图片 底部可显示文字”的知识内容,以及如何在C#环境中实现这一功能。 首先,C#是微软开发的一种面向对象的编程语言,它具有丰富的类库和强大的.NET框架支持,非常...

    C#实现动态生成picturebox控件,并在其载入不同的图片和文字

    在某些场景下,我们可能需要根据程序运行时的需求动态生成PictureBox控件,并且加载不同的图片和文字。这个过程涉及到C#窗体应用的事件处理、控件操作以及图形绘制。接下来,我们将深入探讨如何实现这一功能。 首先...

    C#将输入的文字转化为图片

    可以将用户输入的文字转化为图片进行保存,C#代码,能够进行成功的。有需要的可以放心下载

    C# 动态生成条形码图片

    ### C# 动态生成条形码图片:详解与实现 #### 一、背景与应用场景 在现代化的商品流通与管理领域中,条形码技术因其高效性和准确性而被广泛采用。通过扫描条形码,可以快速获取商品信息,极大地提高了工作效率。...

    QRCode二维码生成器, C#, 支持中间图片,中间文字,头部文字。直接可用

    它不仅能够生成基本的二维码,还具备在二维码中间插入图片和文字,以及添加头部文字的能力,使得生成的二维码更具个性化和信息丰富性。 在C#中,实现二维码生成的核心技术是利用开源库或自定义算法来编码数据并将其...

    C#二维码生成Demo,生成图片证件Demo

    接下来是“C#生成图片证件Demo”。在现实生活中,证件照片是个人身份识别的重要组成部分,而在数字化时代,生成电子版的证件图片则需要编程技术来实现。在C#中,我们可以利用System.Drawing命名空间中的类,如Image...

    C#实现 图片转Excel 图片转文本 高精度转换 OCR识别

    总之,这个工具包提供了一种高效、准确的方法,将包含文字的图片转换为Excel表格和文本,借助于C#编程语言和一系列第三方库,尤其是百度AI的OCR服务,实现了高精度的图片识别和格式化的Excel输出。开发者只需要配置...

    c#开发pdf文件拆分、转图片;pdf、图片内容提取,ocr文字识别技术,tesseract。

    在这个主题中,我们将深入探讨如何利用C#进行PDF文件的拆分、转换为图片,以及进行OCR(Optical Character Recognition,光学字符识别)文字识别。 首先,PDF文件的拆分是一项常见的需求,尤其是当一个大文件需要被...

    C# NPOI生成word插入图片和表格

    总结一下,C#和NPOI的组合使得在Word文档中动态生成内容变得非常方便。无论是插入表格展示数据,还是插入图片增强视觉效果,NPOI都提供了丰富的API来实现。在实际项目中,这种技术常用于自动化报告生成、数据导出等...

    C#二维码图片生成,二维码图片解码含源代码

    C#二维码图片生成,二维码图片解码含源代码 比较适合初学和进阶学者,使用的是com.google.zxing.common库 将指定的文字或数字生成二维码图片 将生成的二维码图二内容进行解码成对应的文字或数字。 可进行设置图片的...

    C#生成单色位图的方法.zip_C# 单色位图_C# 单色位图_C# 图片转单色_c#单色位图

    要使用C#生成单色位图,我们需要利用System.Drawing命名空间中的Bitmap类。以下是一个基本步骤的概述: 1. **创建Bitmap对象**:首先,我们需要创建一个Bitmap对象,指定图像的宽度和高度。例如: ```csharp int ...

    C#打印条码不需要使用第三方插件,C#生成二维码,导出PDF,c#生成二维码超级简单,方便直接使用,易入门

    首先,C#生成二维码的核心是利用编码算法将文本数据转换成图像格式。在这个项目中,开发者可能使用了内置的库或者自定义的算法来实现这一过程。常见的编码标准包括QR码(Quick Response Code),它能存储大量的文本...

    C# 实现生成cad文件

    1.C#实现生成CAD 文件(dwg)2.案例中包含画圆形,画线,生成CAD文件. dwg文件3.需要安装autocad2007

    C#在底图上动态生成文字和图片.rar

    在实际的"WebApplication1"项目中,你可能需要根据具体需求,比如来自数据库的数据、用户输入等,动态生成文字和图片。结合ASP.NET的Page生命周期和事件处理,可以创建一个交互式的网页服务,允许用户上传图片、输入...

    c#图片生成

    本项目聚焦于“C#图片生成”,这通常涉及到图像处理技术,它允许程序员创建、编辑或操作图像。在这个场景中,我们有一个C#应用程序,能够加载已有的图片,并在图片上添加文字,同时提供了复制和另存为的功能,以增强...

    C#bmp单色生成

    在某些场景下,我们可能需要生成单色的BMP图片,例如创建二值化图像或者简单的图标。本教程将详细介绍如何使用C#来生成单色的BMP图像。 首先,我们需要了解BMP文件的基本结构。BMP文件由一个文件头和一个或多个位图...

Global site tag (gtag.js) - Google Analytics