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文件中 ...
随机推荐
- SPOJ GSS7 - Can you answer these queries VII
板的不能再板,链剖+线段树或者是LCT随便维护. 感觉唯一要注意的是跳链的时候要对$x$向上跳和$y$向上跳的情况分开讨论,而不能直接$swap$,因为只有两段接触的端点才能相互合并,而且每一次向上跳 ...
- 牛客网java基础题分类
http://www.cnblogs.com/tptptptp/p/5904075.html
- 《Head First Servlets & JSP》-10-定制标记开发
标记文件:很想include,但是比include更好 建立和使用标记文件的最简方法 取一个被包含文件(如Header.jsp),把它重命名为带有一个.tag扩展名(Header.tag): 把标记文 ...
- 【Arcgis for android】Error inflating class com.esri.android.map.MapView【已解决】
解决方案:如果你是一个项目之前调试是好的,突然调试报这个错,听我的,直接卸载手机上调试的这个程序,重新调试,你会发现ok了 环境:arcgis android 10.2 错误:E/AndroidRun ...
- Others - 使用 GitHub Pages 搭建个人博客
写在前面 GitHub 是技术知识分享的地方,如果使用它写其他奇奇怪怪的东西就算了. 正文 新建一个名为 username.github.io 的 repository.其中 username 为你的 ...
- ubuntu - 14.04,解决Gnome桌面右键菜单失效问题!
我安装完ubuntu14.04,首先安装经典版的Gnome,刚安装完经典版的Gnome,在桌面点击鼠标右键会弹出菜单,使用非常方便,但是当我安装了最新版的Gnome15.10之后,我发现再进入经典版的 ...
- 不准使用xib自定义控制器view的大小
1.AppDelegate.m // // 文 件 名:AppDelegate.m // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...
- 高效 MacBook 工作环境配置
转自:https://mp.weixin.qq.com/s/sloc6HgKcosXtWcbMB_5hA 工欲善其事,必先利其器,工具永远都是用来解决问题的,没必要为了工具而工具,一切工具都是为了能快 ...
- kuangbin专题K(next数组)
题目链接: https://vjudge.net/contest/70325#problem/K 题意: 给出一个字符串 str, 求 str 的所有前缀总共出现的次数. 思路: 先求一次 next ...
- 【三支火把】--- 关于BIOS&UEFI查阅资料网站总结
UEFI和BIOS的水太深,网上能找到的资料是那么的少,各个组织之间互有交叉,难弄的很,总结了下常用的BIOS资料网站,仅供参考,如果遗漏之处,请指出,博主将继续完善补充……