C# 生成文字图片二维码

生成文字图片

public void CreateImage(string name, string filePath)
{
int wid = 400;
int high = 200;
Font font = new Font("Arial", 28, FontStyle.Bold);
//绘笔颜色
SolidBrush brush = new SolidBrush(Color.Green);
StringFormat format = new StringFormat(StringFormatFlags.NoClip);


Bitmap image = new Bitmap(wid, high);
Graphics g = Graphics.FromImage(image);
SizeF sizef = g.MeasureString(name, font, PointF.Empty, format);
int width = (int)(sizef.Width + 1);
int height = (int)(sizef.Height + 1);
image.Dispose();
image = new Bitmap(width, height);
//g.Clear(ColorTranslator.FromHtml("#f0f0f0"));
g = Graphics.FromImage(image);
g.Clear(Color.White);//Transparent

RectangleF rect = new RectangleF(0, 0, width, height);
// RectangleF rect = new RectangleF(5, 2, wid, high);
//绘制图片
g.DrawString(name, font, brush, rect);
//保存图片
image.Save(filePath, ImageFormat.Png);
//释放对象
g.Dispose();
image.Dispose();
}

效果图
[img]http://dl2.iteye.com/upload/attachment/0113/9133/3402d2d2-87c2-3710-afc0-22e224c8ab27.png[/img]
通过第三方线生成二码:

int len = show.Length / 5;
for (int j = 1; j <= len; j++)
{
show = show.Insert(j*5+j-1, "\n");
}
CreateImage(show, path + "dt_Site_Text/" + text + ".png");
System.Uri httpUrl = new System.Uri("http://qr.topscan.com/api.php?text=" + text + "&logo=http://111.17.223.51:28080/AffixFile/dt_Site_Text/" + text + ".png");
req = (HttpWebRequest)(WebRequest.Create(httpUrl));
req.Timeout = 180000; //设置超时值10秒
req.Method = "GET";
res = (HttpWebResponse)(req.GetResponse());
img = new Bitmap(res.GetResponseStream());//获取图片
img.Save(path + "dt_Site_Scan/" + text + ".png");//随机名*/

效果如下:
[img]http://dl2.iteye.com/upload/attachment/0113/9135/587ce0c6-6591-3d99-8ea5-4f6aa3686348.png[/img]
通过QRCode生成二码:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.IO;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;

namespace QRCodeSample
{
public partial class QrCodeSampleApp : Form
{
public QrCodeSampleApp()
{
InitializeComponent();
}

private void frmSample_Load(object sender, EventArgs e)
{
cboEncoding.SelectedIndex = 2;
cboVersion.SelectedIndex = 6;
cboCorrectionLevel.SelectedIndex = 1;
}

private void btnEncode_Click_1(object sender, EventArgs e)
{
if (txtEncodeData.Text.Trim() == String.Empty)
{
MessageBox.Show("内容不能为空!");
txtEncodeData.Focus();
return;
}
Image image = CreateImage();
if (image != null)
{
picEncode.Image = image;
}


string name = txtEncodeData.Text;
int len = name.Length / 5;
for (int i = 1; i <= len / 5; i++)
{

name = name.Insert((i * 5)+i-1, "\n");
}
CreateImage(name, @"E:\emulator\QRCode\QRCode\QRCodeSampleApp\Name.jpg");
}

private Image CreateImage()
{
var encoder = new QRCodeEncoder();
String encoding = cboEncoding.Text;
if (encoding == "Byte")
{
encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
}
else if (encoding == "AlphaNumeric")
{
encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
}
else if (encoding == "Numeric")
{
encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
}
try
{
int scale = Convert.ToInt16(txtSize.Text);
encoder.QRCodeScale = scale;
}
catch (Exception ex)
{
MessageBox.Show("大小参数错误!");
return null;
}
try
{
int version = Convert.ToInt16(cboVersion.Text);
encoder.QRCodeVersion = version;
}
catch (Exception ex)
{
MessageBox.Show("版本参数错误 !");
return null;
}

string errorCorrect = cboCorrectionLevel.Text;
if (errorCorrect == "L")
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
else if (errorCorrect == "M")
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
else if (errorCorrect == "Q")
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
else if (errorCorrect == "H")
encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;

String data = txtEncodeData.Text;
Image image = encoder.Encode(data);
return image;
}

private void btnSave_Click(object sender, EventArgs e)
{
saveFileDialog.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";
saveFileDialog.Title = "Save";
saveFileDialog.FileName = DateTime.Now.ToString("yyyyMMddHHmmss")+".jpg";
saveFileDialog.ShowDialog();

if (saveFileDialog.FileName != "")
{
var fileStream = (FileStream)saveFileDialog.OpenFile();
switch (saveFileDialog.FilterIndex)
{
case 1:
picEncode.Image.Save(fileStream, ImageFormat.Jpeg);
break;

case 2:
picEncode.Image.Save(fileStream, ImageFormat.Bmp);
break;

case 3:
picEncode.Image.Save(fileStream, ImageFormat.Gif);
break;
case 4:
picEncode.Image.Save(fileStream, ImageFormat.Png);
break;
}
fileStream.Close();
}
}


public void CreateImage(string name, string filePath)
{
int wid = 400;
int high = 200;
Font font = new Font("Arial", 28, FontStyle.Bold);
//绘笔颜色
SolidBrush brush = new SolidBrush(Color.Green);
StringFormat format = new StringFormat(StringFormatFlags.NoClip);


Bitmap image = new Bitmap(wid, high);
Graphics g = Graphics.FromImage(image);
SizeF sizef = g.MeasureString(name, font, PointF.Empty, format);
int width = (int)(sizef.Width + 1);
int height = (int)(sizef.Height + 1);
image.Dispose();
image = new Bitmap(width, height);
//g.Clear(ColorTranslator.FromHtml("#f0f0f0"));
g = Graphics.FromImage(image);
g.Clear(Color.White);

RectangleF rect = new RectangleF(0, 0, width, height);
// RectangleF rect = new RectangleF(5, 2, wid, high);
//绘制图片
g.DrawString(name, font, brush, rect);
//保存图片
image.Save(filePath, ImageFormat.Png);
//释放对象
g.Dispose();
image.Dispose();
}

private void btnPrint_Click(object sender, EventArgs e)
{
printDialog.Document = printDocument1;
DialogResult r = printDialog.ShowDialog();
if (r == DialogResult.OK)
{
printDocument1.Print();
}
}

private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.DrawImage(picEncode.Image, 0, 0);
}

private void btnOpen_Click(object sender, EventArgs e)
{
openFile.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png|All files (*.*)|*.*";
openFile.FilterIndex = 1;
openFile.RestoreDirectory = true;
openFile.FileName = string.Empty;

if (openFile.ShowDialog() == DialogResult.OK)
{
String fileName = openFile.FileName;
picDecode.Image = new Bitmap(fileName);
}
}

private void btnDecode_Click(object sender, EventArgs e)
{
try
{
var decoder = new QRCodeDecoder();
//QRCodeDecoder.Canvas = new ConsoleCanvas();
String decodedString = decoder.decode(new QRCodeBitmapImage(new Bitmap(picDecode.Image)));
txtDecodedData.Text = decodedString;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void btnChooseIco_Click(object sender, EventArgs e)
{
openFile.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png|All files (*.*)|*.*";
openFile.FilterIndex = 1;
openFile.RestoreDirectory = true;
openFile.FileName = string.Empty;

if (openFile.ShowDialog() == DialogResult.OK)
{
String fileName = openFile.FileName;
PicIco.Image = new Bitmap(fileName);
}
}

private void btnCreateWithIco_Click(object sender, EventArgs e)
{
Image img = CreateImage();
if (PicIco.Image != null)
{
picEncode.Image = CombinImage(img, PicIco.Image);
}
else
{
MessageBox.Show("请选择ICO图片 !");
}
}

#region 生成带图片的二维码

/// <summary>
/// 合并图片
/// </summary>
/// <param name="imgBack"></param>
/// <param name="img"></param>
/// <returns></returns>
public static Image CombinImage(Image imgBack, Image img)
{
if (img.Height != 50 || img.Width != 50)
{
img = ResizeImage(img, 50, 50, 0);
}
Graphics g = Graphics.FromImage(imgBack);

g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height); //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);

//g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框

//g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);

g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);
GC.Collect();
return imgBack;
}

/// <summary>
/// 调用此函数后使此两种图片合并,类似相册,有个
/// 背景图,中间贴自己的目标图片
/// </summary>
/// <param name="imgBack">粘贴的源图片</param>
/// <param name="destImg">粘贴的目标图片</param>
public static Image CombinImage(Image imgBack, string destImg)
{
Image img = Image.FromFile(destImg);
return CombinImage(imgBack, img);
}

/// <summary>
/// Resize图片
/// </summary>
/// <param name="bmp">原始Bitmap</param>
/// <param name="newW">新的宽度</param>
/// <param name="newH">新的高度</param>
/// <param name="mode">保留着,暂时未用</param>
/// <returns>处理以后的图片</returns>
public static Image ResizeImage(Image bmp, int newW, int newH, int mode)
{
try
{
Image b = new Bitmap(newW, newH);
Graphics g = Graphics.FromImage(b);

// 插值算法的质量
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height),
GraphicsUnit.Pixel);
g.Dispose();
return b;
}
catch
{
return null;
}
}

#endregion
}
}

效果如下:
[img]http://dl2.iteye.com/upload/attachment/0113/9137/ea2484ac-517f-3e2c-aa0f-63e4c32e79bc.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值