Net Zxing 源码地址 http://zxingnet.codeplex.com/

github 地址 https://github.com/zxing/zxing

新建一个Winform 项目,引用zxing.dll就可了,下图是生成的二维码

  1. //生成中间带二维码的图片
  2. private void btnImageCode_Click(object sender, EventArgs e)
  3. {
  4. lblShow.Text = "";
  5. try
  6. {
  7. //构造二维码写码器
  8. MultiFormatWriter mutiWriter = new MultiFormatWriter();
  9. Hashtable hint = new Hashtable();
  10. hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
  11. hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
  12. //生成二维码
  13. ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , , hint);
  14. Bitmap img = bm.ToBitmap();
  15.  
  16. //要插入到二维码中的图片
  17. Image middlImg = picLittle.Image;
  18. //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
  19. Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, , );
  20. //计算插入图片的大小和位置
  21. int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
  22. int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height);
  23. int middleImgL = (img.Width - middleImgW) / ;
  24. int middleImgT = (img.Height - middleImgH) / ;
  25.  
  26. //将img转换成bmp格式,否则后面无法创建 Graphics对象
  27. Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
  28. using (Graphics g = Graphics.FromImage(bmpimg))
  29. {
  30. g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  31. g.SmoothingMode = SmoothingMode.HighQuality;
  32. g.CompositingQuality = CompositingQuality.HighQuality;
  33. g.DrawImage(img, , );
  34. }
  35.  
  36. //在二维码中插入图片
  37. Graphics MyGraphic = Graphics.FromImage(bmpimg);
  38. //白底
  39. MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
  40. MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH);
  41.  
  42. picCode.Image = bmpimg;
  43.  
  44. //自动保存图片到当前目录
  45. string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
  46. bmpimg.Save(filename, ImageFormat.Jpeg);
  47. lblShow.Text = "图片已保存到:" + filename;
  48. }
  49. catch (Exception ee)
  50. {
  51. MessageBox.Show(ee.Message);
  52. }
  53. }

生成条形码、二维码和图片解码代码

  1. //生成条形码
  2. private void btnBarCode_Click(object sender, EventArgs e)
  3. {
  4. lblShow.Text = "";
  5. Regex rg = new Regex("^[0-9]{13}$");
  6. if (!rg.IsMatch(txtContent.Text.Trim()))
  7. {
  8. MessageBox.Show("本例子采用EAN_13编码,需要输入13位数字");
  9. return;
  10. }
  11.  
  12. try
  13. {
  14. MultiFormatWriter mutiWriter = new MultiFormatWriter();
  15. ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.EAN_13, , );
  16. Bitmap img= bm.ToBitmap();
  17. picCode.Image = img;
  18.  
  19. //自动保存图片到当前目录
  20. string filename = Environment.CurrentDirectory + "\\EAN_13" + DateTime.Now.Ticks.ToString() + ".jpg";
  21. img.Save(filename, ImageFormat.Jpeg);
  22. lblShow.Text = "图片已保存到:" + filename;
  23. }
  24. catch (Exception ex)
  25. {
  26. MessageBox.Show(ex.Message);
  27. }
  28.  
  29. }
  30.  
  31. //生成二维码
  32. private void btnDimensionCode_Click(object sender, EventArgs e)
  33. {
  34. lblShow.Text = "";
  35. try
  36. {
  37. //构造二维码写码器
  38. MultiFormatWriter mutiWriter = new MultiFormatWriter();
  39. ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , );
  40. Bitmap img = bm.ToBitmap();
  41.  
  42. picCode.Image = img;
  43.  
  44. //自动保存图片到当前目录
  45. string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
  46. img.Save(filename, ImageFormat.Jpeg);
  47. lblShow.Text = "图片已保存到:" + filename;
  48. }
  49. catch (Exception ex)
  50. {
  51. MessageBox.Show(ex.Message);
  52. }
  53. }
  54.  
  55. //打开二维码图片路径
  56. string opFilePath = string.Empty;
  57.  
  58. //插入二维码中的小图片
  59. private void picLittle_Click(object sender, EventArgs e)
  60. {
  61. OpenFileDialog ofd = new OpenFileDialog();
  62. ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico";
  63. if (ofd.ShowDialog() == DialogResult.OK)
  64. {
  65. opFilePath = ofd.FileName;
  66. picLittle.Image = Image.FromFile(opFilePath);
  67. }
  68. }
  69.  
  70. //生成中间带二维码的图片
  71. private void btnImageCode_Click(object sender, EventArgs e)
  72. {
  73. lblShow.Text = "";
  74. try
  75. {
  76. //构造二维码写码器
  77. MultiFormatWriter mutiWriter = new MultiFormatWriter();
  78. Hashtable hint = new Hashtable();
  79. hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
  80. hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
  81. //生成二维码
  82. ByteMatrix bm = mutiWriter.encode(txtContent.Text, BarcodeFormat.QR_CODE, , , hint);
  83. Bitmap img = bm.ToBitmap();
  84.  
  85. //要插入到二维码中的图片
  86. Image middlImg = picLittle.Image;
  87. //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
  88. Size realSize = mutiWriter.GetEncodeSize(txtContent.Text, BarcodeFormat.QR_CODE, , );
  89. //计算插入图片的大小和位置
  90. int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
  91. int middleImgH = Math.Min((int)(realSize.Height / 3.5), middlImg.Height);
  92. int middleImgL = (img.Width - middleImgW) / ;
  93. int middleImgT = (img.Height - middleImgH) / ;
  94.  
  95. //将img转换成bmp格式,否则后面无法创建 Graphics对象
  96. Bitmap bmpimg = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
  97. using (Graphics g = Graphics.FromImage(bmpimg))
  98. {
  99. g.InterpolationMode = InterpolationMode.HighQualityBicubic;
  100. g.SmoothingMode = SmoothingMode.HighQuality;
  101. g.CompositingQuality = CompositingQuality.HighQuality;
  102. g.DrawImage(img, , );
  103. }
  104.  
  105. //在二维码中插入图片
  106. Graphics MyGraphic = Graphics.FromImage(bmpimg);
  107. //白底
  108. MyGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
  109. MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH);
  110.  
  111. picCode.Image = bmpimg;
  112.  
  113. //自动保存图片到当前目录
  114. string filename = Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
  115. bmpimg.Save(filename, ImageFormat.Jpeg);
  116. lblShow.Text = "图片已保存到:" + filename;
  117. }
  118. catch (Exception ee)
  119. {
  120. MessageBox.Show(ee.Message);
  121. }
  122. }
  123.  
  124. private void btnSelect_Click(object sender, EventArgs e)
  125. {
  126. OpenFileDialog ofd = new OpenFileDialog();
  127. ofd.Filter = "图片文件|*.bmp;*.jpg;*.png;*.ico";
  128. if (ofd.ShowDialog() == DialogResult.OK)
  129. {
  130. opFilePath = ofd.FileName;
  131. picDeCode.ImageLocation = opFilePath;
  132. }
  133. }
  134.  
  135. //图片解码
  136. private void btnDecode_Click(object sender, EventArgs e)
  137. {
  138. MultiFormatReader multiReader = new MultiFormatReader();
  139. Bitmap img = (Bitmap)Bitmap.FromFile(opFilePath);
  140. if (img == null)
  141. return;
  142.  
  143. LuminanceSource ls = new RGBLuminanceSource(img, img.Width, img.Height);
  144. BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(ls));
  145. //注意 必须是Utf-8编码
  146. Hashtable hints = new Hashtable();
  147. hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
  148. Result r = multiReader.decode(bb, hints);
  149. txtDeCodeMsg.Text = r.Text;
  150. lblShow.Text = "解码成功!";
  151. }

测试例子代码

生成二维码还有ThoughtWorks.QRCode.dll

  1. public void MarkQrCode(string str)
  2. {
  3.  
  4. //初始化二维码生成工具
  5. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  6. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  7. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  8. qrCodeEncoder.QRCodeVersion = ; //版本
  9. qrCodeEncoder.QRCodeScale = ; //大小
  10.  
  11. //将字符串生成二维码图片
  12. Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default);
  13.  
  14. //保存为PNG到内存流
  15. MemoryStream ms = new MemoryStream();
  16. image.Save(ms, ImageFormat.Png);
  17.  
  18. //输出二维码图片
  19. Response.BinaryWrite(ms.GetBuffer());
  20. Response.End();
  21. }

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. CSS相关知识和经验的碎片化记录

    1.子DIV块中设置margin-top时影响父DIV块位置的问题 解决办法1:若子DIV块中使用margin-top,则在父DIV块中添加:overflow:hidden; 解决办法2:在子DIV块 ...

  2. 循环中标签outer用法:break outer continue outer

    1.outer: break 如果不使用标签,break跳出里层for循环,使用break标签,则跳出两层循环 输出:i:0 j:0 i:0 j:1 public class breakTest { ...

  3. Mac下的UI自动化测试 (二)

    下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...

  4. ipmitool查询服务器功耗

    通过ipmitool查看服务器功耗 ipmitool -H $ip -I lanplus -U $user -P $password sdr elist | grep "Pwr Consum ...

  5. RedHat6安装git

    通过yum安装git : 一. 先配置yum: 把redhat系统镜像加载到电脑光驱中(无光驱可用u盘),然后把该镜像配置到环境变量中 文件名不限 在此新建的RHEL_6文件中添加如下内容 其中bas ...

  6. Android源码树中C代码的编译

    侯 Sir说:“源码之下,了无秘密.” 但有些秘密还是要搞起来了看得更真切,仅从静态代码的体位很难体会到运动时的妙处.因此环境搭好了,下一步就是调试.gdbserver搭配gdb的调试环境走得很顺利, ...

  7. iOS工程师 - 简历

    基本信息 姓 名:张学友                  性 别:男 年 龄:28                      学 历:本科 毕业学校:广西师范大学       专 业:通信工程 手 ...

  8. Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类

    Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...

  9. APIO 2012 派遣(可并堆)

    APIO 2012 派遣(可并堆) 给定一棵N个点的树和M,每个点有两个权值ai,bi,每次可以选择一个点x,然后在这个点的子树中选若干点(可以不选自己),使得这些点的\(\sum b_i<=M ...

  10. HTTP,HTTPS端口号

    博主暂做个笔记,查询资料再纠正~~~~小白不要不假思索的抄走~~~ 一般情况下,HTTP默认工作端口是8000,HTTPS默认工作端口是443