Net Zxing 源码地址 http://zxingnet.codeplex.com/

github 地址 https://github.com/zxing/zxing

新建一个Winform 项目,引用zxing.dll就可了,下图是生成的二维码

 //生成中间带二维码的图片
private void btnImageCode_Click(object sender, EventArgs e)
{
lblShow.Text = "";
try
{
//构造二维码写码器
MultiFormatWriter mutiWriter = new MultiFormatWriter();
Hashtable hint = new Hashtable();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//生成二维码
ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , , hint);
Bitmap img = bm.ToBitmap(); //要插入到二维码中的图片
Image middlImg = picLittle.Image;
//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, , );
//计算插入图片的大小和位置
int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height);
int middleImgL = (img.Width - middleImgW) / ;
int middleImgT = (img.Height - middleImgH) / ; //将img转换成bmp格式,否则后面无法创建 Graphics对象
Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage(img, , );
} //在二维码中插入图片
Graphics MyGraphic = Graphics.FromImage(bmpimg);
//白底
MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH); picCode.Image = bmpimg; //自动保存图片到当前目录
string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
bmpimg.Save(filename, ImageFormat.Jpeg);
lblShow.Text = "图片已保存到:" + filename;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}

生成条形码、二维码和图片解码代码

 //生成条形码
private void btnBarCode_Click(object sender, EventArgs e)
{
lblShow.Text = "";
Regex rg = new Regex("^[0-9]{13}$");
if (!rg.IsMatch(txtContent.Text.Trim()))
{
MessageBox.Show("本例子采用EAN_13编码,需要输入13位数字");
return;
} try
{
MultiFormatWriter mutiWriter = new MultiFormatWriter();
ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.EAN_13, , );
Bitmap img= bm.ToBitmap();
picCode.Image = img; //自动保存图片到当前目录
string filename = Environment.CurrentDirectory + "\\EAN_13" + DateTime.Now.Ticks.ToString() + ".jpg";
img.Save(filename, ImageFormat.Jpeg);
lblShow.Text = "图片已保存到:" + filename;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} } //生成二维码
private void btnDimensionCode_Click(object sender, EventArgs e)
{
lblShow.Text = "";
try
{
//构造二维码写码器
MultiFormatWriter mutiWriter = new MultiFormatWriter();
ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , );
Bitmap img = bm.ToBitmap(); picCode.Image = img; //自动保存图片到当前目录
string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
img.Save(filename, ImageFormat.Jpeg);
lblShow.Text = "图片已保存到:" + filename;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} //打开二维码图片路径
string opFilePath = string.Empty; //插入二维码中的小图片
private void picLittle_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico";
if (ofd.ShowDialog() == DialogResult.OK)
{
opFilePath = ofd.FileName;
picLittle.Image = Image.FromFile(opFilePath);
}
} //生成中间带二维码的图片
private void btnImageCode_Click(object sender, EventArgs e)
{
lblShow.Text = "";
try
{
//构造二维码写码器
MultiFormatWriter mutiWriter = new MultiFormatWriter();
Hashtable hint = new Hashtable();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//生成二维码
ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , , hint);
Bitmap img = bm.ToBitmap(); //要插入到二维码中的图片
Image middlImg = picLittle.Image;
//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, , );
//计算插入图片的大小和位置
int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height);
int middleImgL = (img.Width - middleImgW) / ;
int middleImgT = (img.Height - middleImgH) / ; //将img转换成bmp格式,否则后面无法创建 Graphics对象
Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.DrawImage(img, , );
} //在二维码中插入图片
Graphics MyGraphic = Graphics.FromImage(bmpimg);
//白底
MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH); picCode.Image = bmpimg; //自动保存图片到当前目录
string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
bmpimg.Save(filename, ImageFormat.Jpeg);
lblShow.Text = "图片已保存到:" + filename;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
} private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico";
if (ofd.ShowDialog() == DialogResult.OK)
{
opFilePath = ofd.FileName;
picDeCode.ImageLocation = opFilePath;
}
} //图片解码
private void btnDecode_Click(object sender, EventArgs e)
{
MultiFormatReader multiReader = new MultiFormatReader();
Bitmap img = (Bitmap)Bitmap.FromFile(opFilePath);
if (img == null)
return; LuminanceSource ls = new RGBLuminanceSource(img, img.Width, img.Height);
BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(ls));
//注意 必须是Utf-8编码
Hashtable hints = new Hashtable();
hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
Result r = multiReader.decode(bb, hints);
txtDeCodeMsg.Text = r.Text;
lblShow.Text = "解码成功!";
}

测试例子代码

生成二维码还有ThoughtWorks.QRCode.dll

public void MarkQrCode(string str)
{ //初始化二维码生成工具
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
qrCodeEncoder.QRCodeVersion = ; //版本
qrCodeEncoder.QRCodeScale = ; //大小 //将字符串生成二维码图片
Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default); //保存为PNG到内存流
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Png); //输出二维码图片
Response.BinaryWrite(ms.GetBuffer());
Response.End();
}

Google Zxing 生成二维码的更多相关文章

  1. 使用google zxing生成二维码图片

    生成二维码工具类: 1 import java.awt.geom.AffineTransform; 2 import java.awt.image.AffineTransformOp; 3 impor ...

  2. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  3. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  4. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  5. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency> <gr ...

  6. 通过zxing生成二维码

    二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...

  7. zxing生成二维码设置边框颜色

    真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有可以设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap( ...

  8. 利用google api生成二维码名片

    利用google api生成二维码名片 二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩 ...

  9. java利用Google Zxing实现 二维码生成与解析

    1.引入zxing 2.使用下面两个类:QRCodeUtil.java和BufferedImageLuminanceSource.java 3.新建单元测试类 复制下面测试代码即可. 1.pom文件中 ...

随机推荐

  1. p3253 [JLOI2013]删除物品

    传送门 分析 我们发现两个栈可以看作一个数组,而栈顶则是将这个数组拆成两个栈的分割点. 于是每次移动就变成了分割点的移动,每次移动时都统计下目的分割点和当前分割点之间的物品数目即可. 代码 #incl ...

  2. Linux-shell获取天气

    用Linux中的shell获取天气,本来觉的比较难,原来,真简单,个位数的代码就搞定. 获取对应城市天气 所有天气信息都从中国天气网获取.每一个城市多会对应一个id(比如,北京为101010100,因 ...

  3. Java/C++中数组的区别

    1. 数组名区别 -------------------------------------- 1. java中不用说,本着一切皆对象的原则,所以java中的数组也是对象.那么数组类是哪个,当然不是j ...

  4. undefined reference to `clock_gettime

    下面这个错误通常是因为链接选项里漏了-lrt,但有时发现即使加了-lrt仍出现这个问题,使用nm命令一直,会发现-lrt最终指向的文件没有包含任何symbol,这个时候,可以找相应的静态库版本libr ...

  5. ArcGIS Server GP服务使用常见错误总结

    ArcGIS GP服务问题列表 输入参数错误 在使用GP服务时,从创建模型到发布服务,再到调用服务,整个过程都需要注意输入参数和输出参数的问题.GP服务支持的输入和输出参数可详见 http://hel ...

  6. table 和 div 简单布局

    table 简单布局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  7. winform改变控件的外形

    GraphicsPath gp = new GraphicsPath(); gp.AddEllipse(0, 0, 40, 40); Region region = new Region(gp); c ...

  8. ASP.NET MVC 之各种jQuery提交模式实例

    1.$.ajax提交 var _data = { "dictItemID": dictItemID, "itemType": itemType, "i ...

  9. SQL:bat批处理多个.sql文件

    一.批处理文件 update.bat       设置sqlserver的实例     记得一定要配置logfile文件 @echo off :: #### B. #### set LOGFILE=& ...

  10. java中计算一段时间内白天的时间和夜晚的时间

    之前,采用拼接字符串的形式,不断地在Date类型和Long类型之间转换,实在是太过于麻烦,后来采取了这种思路:假设我们将22:00 ~ 10:00 视为夜间时间,则我们先计算出10:00 相对于当天的 ...