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. c++ public protected private 继承

    1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象 ...

  2. Spring第一篇

    我计划用3到五篇文章来描述Spring,这是第一篇 1 . 什么是Spring Spring 是一个开源框架,Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnso ...

  3. ZOJ 2301 Color the Ball (离散化+线段树)

    题意:有从 1 开始递增依次编号的很多球,开始他们都是黑色的,现在依次给出 n 个操作(ai,bi,ci),每个操作都是把编号 ai 到 bi 区间内 的-所有球涂成 ci 表示的颜色(黑 or 白) ...

  4. Spring @ResponseBody 返回乱码 的优雅解决办法

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 返回的结果中,中文全部被问号(?)代替的解决办法: *-servlet.xml的部分配置如下: <bean id=&quo ...

  5. java打成jar包后,class,getResource()出现null指针异常

    1.SqlHelper.java有包路径没?如果有,是不是类似于com.db.jdbc? 不管怎么办,你SqlHelper.class.getResourceAsStream("/mysql ...

  6. AutoResetEvent的使用介绍(用AutoResetEvent实现同步)

    前几天碰到一个线程的顺序执行的问题,就是一个异步线程往A接口发送一个数据请求.另外一个异步线程往B接口发送一个数据请求,当A和B都执行成功了,再往C接口发送一个请求.说真的,一直做BS项目,对线程了解 ...

  7. C#多线程 线程嵌套调用问题

    线程嵌套指的是:线程A的执行代码启动了线程B,线程B的执行代码又启动了线程C. 我原本以为线程A被Abort后,线程B会自动被Abort,但是我大错特错了. 在这种场景下,线程的管理就非常重要了. 线 ...

  8. 生成全局唯一ID

    在实际业务处理中,有时需要生成全局唯一ID来区别同类型的不同事物,介绍一下几种方式及其C++实现 //获取全局唯一ID //server_id为服务的id,因当同一个服务部署在多个服务器上时,需要区别 ...

  9. Android下创建一个输入法

    输入法是一种可以让用户输入文字的控件.Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音.当安装了特定输入法之后,用户即可在系统 ...

  10. django中将views.py中的python方法传递给html模板文件

    常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): cap ...