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文件中 ...
 
随机推荐
- CF570E Pig and Palindromes
			
完全不会这种类型的$dp$啊…… 考虑回文串一定是可以拆分成(偶数个字母 + 偶数个字母)或者(偶数个字母 + 一个字母 +偶数个字母),两边的偶数个字母其实是完全对称的.因为这道题回文串的长度是给定 ...
 - 去掉utf-8的Bom头:使用java以及jdbc不使用第三方库执行sql文件脚本
			
package com.xxx.xxx.dao; import java.io.BufferedReader; import java.io.File; import java.io.FileInpu ...
 - Jsp入门第二天
			
1. JSP 指令: JSP指令(directive)是为JSP引擎而设计的. 它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分. 2. 在目前的JSP 2.0中,定义了p ...
 - Website开发前页面设计 Mockup的一些工具
			
这里介绍的Website开发前,页面设计的一些工具 1. Balsamiq (我们公司用的) https://balsamiq.com/download/ 2. Figma https://ww ...
 - SDKD 2017 Summer Single Training #03
			
今天的题目有 6 个. 第一题: CodeForces - 400D Dima and Bacteria 这个题实际是不难的,难的可能在题意的理解上还有题干有点长,这个题很考察题意上面,知识点很熟悉 ...
 - ComicEnhancerPro 系列教程
			
这个系列教程实在太长了,图又多,所以我不认为它适合发布在博客上.目前最新版采用CHM格式发布,就放在置顶随笔提供的网盘里,与ComicEnhancerPro在一起.
 - 用MODI OCR 21种语言
			
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2007.12.08更新:2012.07.09按照<MODI中的OCR模块>一文相关内容进行修订2012.07.0 ...
 - yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解
			
yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...
 - 算法训练 Cowboys(DP)
			
问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜……对峙的 ...
 - loj #2044. 「CQOI2016」手机号码
			
#2044. 「CQOI2016」手机号码 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...