Google Zxing 生成二维码
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 生成二维码的更多相关文章
- 使用google zxing生成二维码图片
生成二维码工具类: 1 import java.awt.geom.AffineTransform; 2 import java.awt.image.AffineTransformOp; 3 impor ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- java学习-zxing生成二维码矩阵的简单例子
这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency> <gr ...
- 通过zxing生成二维码
二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...
- zxing生成二维码设置边框颜色
真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有可以设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap( ...
- 利用google api生成二维码名片
利用google api生成二维码名片 二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩 ...
- java利用Google Zxing实现 二维码生成与解析
1.引入zxing 2.使用下面两个类:QRCodeUtil.java和BufferedImageLuminanceSource.java 3.新建单元测试类 复制下面测试代码即可. 1.pom文件中 ...
随机推荐
- loj10093 网络协议
传送门 分析 第一问我们不难想出是缩点之后的新图中入度为0的点的个数,对于第二问,我们画一画可以发现最优策略就是对于每一个入度为0的点都有一个出度为0的点连向它,而对于每一个出度为0的点也一定连向一个 ...
- debug配置
- Inheritance with EF Code First: Part 1 – Table per Hierarchy (TPH)
以下三篇文章是Entity Framework Code-First系列中第七回:Entity Framework Code-First(7):Inheritance Strategy 提到的三篇.这 ...
- SQL GO语句
GO是批处理的标志,是一条或多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划. GO语句把程序分成一个个代码块,即使一个代码块执行错误,它后面的代码块任然 ...
- Makefile的使用
Makefile 使用 一.实验说明 课程说明 在先前的课程中,我们已经学习了 gcc 和 gdb 的使用.本节课程中,我们将介绍 Makefile 的使用.Makefile带来的好处就是--&quo ...
- ConnectionState详解
ConnectionState有六个属性值ConnectionState.Broken;与数据源连接断开.只有在连接打开后才有可能发生这种情况.可以关闭处于这种状态下的连接,然后重新打开.Connec ...
- signalR之java client的websocket BUG处理
最近在用SignalR,服务端已经写好(老铁,没毛病,很稳),然后有坑的是我还得写App端,那就撸吧,java也不是什么很难的东西.奈何坑多(已经踩了一波android的控件bug),这次遇到了MS的 ...
- 使用metasploit进行栈溢出攻击-1
攻击是在bt5下面进行,目标程序是在ubuntu虚拟机上运行. 首先,需要搞明白什么是栈溢出攻击,详细内容请阅读 http://blog.csdn.net/cnctloveyu/article/det ...
- 动态横向(水平)合并GridView数据行DataRow的列
前一段时间,Insus.NET有写过<动态合并GridView数据行DataRow的列>http://www.cnblogs.com/insus/p/3238348.html, 那是纵向( ...
- web安全-密码安全
web安全-密码安全 1.密码的作用 2.储存 3.传输 4.替代方案 5.生物特征密码 (指纹 人脸) 6.密码单向变换彩虹表 组合 密码变换次数越多越安全 加密成本几乎不变(生成密码速度慢一点) ...