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文件中 ...
随机推荐
- CSS相关知识和经验的碎片化记录
1.子DIV块中设置margin-top时影响父DIV块位置的问题 解决办法1:若子DIV块中使用margin-top,则在父DIV块中添加:overflow:hidden; 解决办法2:在子DIV块 ...
- 循环中标签outer用法:break outer continue outer
1.outer: break 如果不使用标签,break跳出里层for循环,使用break标签,则跳出两层循环 输出:i:0 j:0 i:0 j:1 public class breakTest { ...
- Mac下的UI自动化测试 (二)
下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...
- ipmitool查询服务器功耗
通过ipmitool查看服务器功耗 ipmitool -H $ip -I lanplus -U $user -P $password sdr elist | grep "Pwr Consum ...
- RedHat6安装git
通过yum安装git : 一. 先配置yum: 把redhat系统镜像加载到电脑光驱中(无光驱可用u盘),然后把该镜像配置到环境变量中 文件名不限 在此新建的RHEL_6文件中添加如下内容 其中bas ...
- Android源码树中C代码的编译
侯 Sir说:“源码之下,了无秘密.” 但有些秘密还是要搞起来了看得更真切,仅从静态代码的体位很难体会到运动时的妙处.因此环境搭好了,下一步就是调试.gdbserver搭配gdb的调试环境走得很顺利, ...
- iOS工程师 - 简历
基本信息 姓 名:张学友 性 别:男 年 龄:28 学 历:本科 毕业学校:广西师范大学 专 业:通信工程 手 ...
- Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类
Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...
- APIO 2012 派遣(可并堆)
APIO 2012 派遣(可并堆) 给定一棵N个点的树和M,每个点有两个权值ai,bi,每次可以选择一个点x,然后在这个点的子树中选若干点(可以不选自己),使得这些点的\(\sum b_i<=M ...
- HTTP,HTTPS端口号
博主暂做个笔记,查询资料再纠正~~~~小白不要不假思索的抄走~~~ 一般情况下,HTTP默认工作端口是8000,HTTPS默认工作端口是443