如何用.NET生成二维码
如何在ASPNET和WPF中展示二维码
如何在ASPNET和WPF中展示二维码3. 安装QrCodeNet插件,可以通过NuGet包管理器“QrCodeNet”并安装。
4. 在代码中引入QrCodeNet的命名空间 `using QrCodeNet;`。
```C#protected void Page_Load(object sender, EventArgs e)// 创建一个QrCode对象// 创建一个Bitmap对象,设置宽度和高度var qrCodeImage = new Bitmap(qrCode.Matrix.Width,qrCode.Matrix.Height);using (var graphics = Graphics.FromImage(qrCodeImage))// 使用SolidBrush设置前景色为黑色,背景色为白色var foreground = new SolidBrush(Color.Black);var background = new SolidBrush(Color.White);graphics.Clear(Color.White);for (var x = 0; x < qrCodeImage.Width; x++)for (var y = 0; y < qrCodeImage.Height; y++)if (qrCode.Matrix[x, y])graphics.FillRectangle(foreground, x, y, 1, 1);}elsegraphics.FillRectangle(background, x, y, 1, 1);}}}}using (var stream = new MemoryStream()qrCodeImage.Save(stream, ImageFormat.Png);var byteArray = stream.ToArray(;// 将字节数组转换为Base64字符串var base64String = Convert.ToBase64String(byteArray);// 将Base64字符串赋给Image控件的ImageUrl属性qrCodeImageControl.ImageUrl = "data:image/png;base64," + base64String;}```1. 打开Visual Studio并创建一个新的WPF应用程序项目。
C#利用ZXing.Net生成条形码和二维码
C#利⽤⽣成条形码和⼆维码本⽂是利⽤在WinForm中⽣成条形码,⼆维码的⼩例⼦,仅供学习分享使⽤,如有不⾜之处,还请指正。
什么是?ZXing是⼀个开放源码的,⽤Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语⾔的端⼝。
⽽是ZXing 的端⼝之⼀。
在⼯程中引⽤在项⽬中,点击项⽬名称右键-->管理NuGet程序包,打开NuGet包管理器窗⼝,进⾏搜索下载即可,如下图所⽰:关键类结构图包括Reader【识别图⽚中的条形码和⼆维码】) 和Writer【⽣成条形码和⼆维码到图⽚中】两部分,如下图所⽰:涉及知识点:BarcodeWriter ⽤于⽣成图⽚格式的条码类,通过Write函数进⾏输出。
继承关系如上图所⽰。
BarcodeFormat 枚举类型,条码格式QrCodeEncodingOptions ⼆维码设置选项,继承于EncodingOptions,主要设置宽,⾼,编码⽅式等信息。
MultiFormatWriter 复合格式条码写码器,通过encode⽅法得到BitMatrix。
BitMatrix 表⽰按位表⽰的⼆维矩阵数组,元素的值⽤true和false表⽰⼆进制中的1和0。
⽰例效果图关键代码如下所⽰,包含⼀维条码,⼆维条码,和带logo的条码using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;using System.Linq;using System.Text;using System.Threading.Tasks;using ZXing;using mon;using ZXing.QrCode;using ZXing.QrCode.Internal;namespace DemoQrCode{/// <summary>/// 描述:条形码和⼆维码帮助类/// 时间:2018-02-18/// </summary>public class BarcodeHelper{/// <summary>/// ⽣成⼆维码/// </summary>/// <param name="text">内容</param>/// <param name="width">宽度</param>/// <param name="height">⾼度</param>/// <returns></returns>public static Bitmap Generate1(string text,int width,int height){BarcodeWriter writer = new BarcodeWriter();writer.Format = BarcodeFormat.QR_CODE;QrCodeEncodingOptions options = new QrCodeEncodingOptions(){DisableECI = true,//设置内容编码CharacterSet = "UTF-8", //设置⼆维码的宽度和⾼度Width = width,Height = height,Margin = 1//设置⼆维码的边距,单位不是固定像素};writer.Options = options;Bitmap map = writer.Write(text);return map;}/// <summary>/// ⽣成⼀维条形码/// </summary>/// <param name="text">内容</param>/// <param name="width">宽度</param>/// <param name="height">⾼度</param>/// <returns></returns>public static Bitmap Generate2(string text,int width,int height){BarcodeWriter writer = new BarcodeWriter();//使⽤ITF 格式,不能被现在常⽤的⽀付宝、微信扫出来//如果想⽣成可识别的可以使⽤ CODE_128 格式//writer.Format = BarcodeFormat.ITF;writer.Format = BarcodeFormat.CODE_39;EncodingOptions options = new EncodingOptions(){Width = width,Height = height,Margin = 2};writer.Options = options;Bitmap map = writer.Write(text);return map;}/// <summary>/// ⽣成带Logo的⼆维码/// </summary>/// <param name="text">内容</param>/// <param name="width">宽度</param>/// <param name="height">⾼度</param>public static Bitmap Generate3(string text, int width, int height){//Logo 图⽚string logoPath = System.AppDomain.CurrentDomain.BaseDirectory + @"\img\logo.png"; Bitmap logo = new Bitmap(logoPath);//构造⼆维码写码器MultiFormatWriter writer = new MultiFormatWriter();Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>(); hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//hint.Add(EncodeHintType.MARGIN, 2);//旧版本不起作⽤,需要⼿动去除⽩边//⽣成⼆维码BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, width+30, height+30, hint); bm = deleteWhite(bm);BarcodeWriter barcodeWriter = new BarcodeWriter();Bitmap map = barcodeWriter.Write(bm);//获取⼆维码实际尺⼨(去掉⼆维码两边空⽩后的实际尺⼨)int[] rectangle = bm.getEnclosingRectangle();//计算插⼊图⽚的⼤⼩和位置int middleW = Math.Min((int)(rectangle[2] / 3), logo.Width);int middleH = Math.Min((int)(rectangle[3] / 3), logo.Height);int middleL = (map.Width - middleW) / 2;int middleT = (map.Height - middleH) / 2;Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bmpimg)){g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;positingQuality = positingQuality.HighQuality;g.DrawImage(map, 0, 0,width,height);//⽩底将⼆维码插⼊图⽚g.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);g.DrawImage(logo, middleL, middleT, middleW, middleH);}return bmpimg;}/// <summary>/// 删除默认对应的空⽩/// </summary>/// <param name="matrix"></param>/// <returns></returns>private static BitMatrix deleteWhite(BitMatrix matrix){int[] rec = matrix.getEnclosingRectangle();int resWidth = rec[2] + 1;int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);resMatrix.clear();for (int i = 0; i < resWidth; i++){for (int j = 0; j < resHeight; j++){if (matrix[i + rec[0], j + rec[1]])resMatrix[i, j]=true;}}return resMatrix;}}}关于⽣成条形码和⼆维码的⽅式有很多,条码的种类也有很多种,每⼀种都有其对应的应⽤领域。
生成二维码代码
一、Java所需jar包:QRCode.jar/detail/wangpeng047/4008532TwoDimensionCode类:二维码操作核心类[java]view plaincopy1.package qrcode;2.3.import java.awt.Color;4.import java.awt.Graphics2D;5.import java.awt.image.BufferedImage;6.import java.io.File;7.import java.io.IOException;8.import java.io.InputStream;9.import java.io.OutputStream;10.11.import javax.imageio.ImageIO;12.13.import jp.sourceforge.qrcode.QRCodeDecoder;14.import jp.sourceforge.qrcode.exception.DecodingFailedException;15.16.import com.swetake.util.Qrcode;17.18.public class TwoDimensionCode {19.20./**21. * 生成二维码(QRCode)图片22. * @param content 存储内容23. * @param imgPath 图片路径24. */25.public void encoderQRCode(String content, String imgPath) {26.this.encoderQRCode(content, imgPath, "png", 7);27. }28.29./**30. * 生成二维码(QRCode)图片31. * @param content 存储内容32. * @param output 输出流33. */34.public void encoderQRCode(String content, OutputStream output) {35.this.encoderQRCode(content, output, "png", 7);36. }37.38./**39. * 生成二维码(QRCode)图片40. * @param content 存储内容41. * @param imgPath 图片路径42. * @param imgType 图片类型43. */44.public void encoderQRCode(String content, String imgPath, String imgType) {45.this.encoderQRCode(content, imgPath, imgType, 7);46. }47.48./**49. * 生成二维码(QRCode)图片50. * @param content 存储内容51. * @param output 输出流52. * @param imgType 图片类型53. */54.public void encoderQRCode(String content, OutputStream output, String imgType) {55.this.encoderQRCode(content, output, imgType, 7);56. }57.58./**59. * 生成二维码(QRCode)图片60. * @param content 存储内容61. * @param imgPath 图片路径62. * @param imgType 图片类型63. * @param size 二维码尺寸64. */65.public void encoderQRCode(String content, String imgPath, String imgType, int size) {66.try {67. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);68.69. File imgFile = new File(imgPath);70.// 生成二维码QRCode图片71. ImageIO.write(bufImg, imgType, imgFile);72. } catch (Exception e) {73. e.printStackTrace();74. }75. }76.77./**78. * 生成二维码(QRCode)图片79. * @param content 存储内容80. * @param output 输出流81. * @param imgType 图片类型82. * @param size 二维码尺寸83. */84.public void encoderQRCode(String content, OutputStream output, String imgType, int size) {85.try {86. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);87.// 生成二维码QRCode图片88. ImageIO.write(bufImg, imgType, output);89. } catch (Exception e) {90. e.printStackTrace();91. }92. }93.94./**95. * 生成二维码(QRCode)图片的公共方法96. * @param content 存储内容97. * @param imgType 图片类型98. * @param size 二维码尺寸99. * @return100. */101.private BufferedImage qRCodeCommon(String content, String imgType, int size) {102. BufferedImage bufImg = null;103.try {104. Qrcode qrcodeHandler = new Qrcode();105.// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小106. qrcodeHandler.setQrcodeErrorCorrect('M');107. qrcodeHandler.setQrcodeEncodeMode('B');108.// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大109. qrcodeHandler.setQrcodeVersion(size);110.// 获得内容的字节数组,设置编码格式111.byte[] contentBytes = content.getBytes("utf-8");112.// 图片尺寸113.int imgSize = 67 + 12 * (size - 1);114. bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE _INT_RGB);115. Graphics2D gs = bufImg.createGraphics();116.// 设置背景颜色117. gs.setBackground(Color.WHITE);118. gs.clearRect(0, 0, imgSize, imgSize);119.120.// 设定图像颜色> BLACK121. gs.setColor(Color.BLACK);122.// 设置偏移量,不设置可能导致解析出错123.int pixoff = 2;124.// 输出内容> 二维码125.if (contentBytes.length > 0 && contentBytes.length < 800) { 126.boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes) ;127.for (int i = 0; i < codeOut.length; i++) {128.for (int j = 0; j < codeOut.length; j++) {129.if (codeOut[j][i]) {130. gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3,3);131. }132. }133. }134. } else {135.throw new Exception("QRCode content bytes length = " + cont entBytes.length + " not in [0, 800].");136. }137. gs.dispose();138. bufImg.flush();139. } catch (Exception e) {140. e.printStackTrace();141. }142.return bufImg;143. }144.145./**146. * 解析二维码(QRCode)147. * @param imgPath 图片路径148. * @return149. */150.public String decoderQRCode(String imgPath) {151.// QRCode 二维码图片的文件152. File imageFile = new File(imgPath);153. BufferedImage bufImg = null;154. String content = null;155.try {156. bufImg = ImageIO.read(imageFile);157. QRCodeDecoder decoder = new QRCodeDecoder();158. content = new String(decoder.decode(new TwoDimensionCodeImage(b ufImg)), "utf-8");159. } catch (IOException e) {160. System.out.println("Error: " + e.getMessage());161. e.printStackTrace();162. } catch (DecodingFailedException dfe) {163. System.out.println("Error: " + dfe.getMessage());164. dfe.printStackTrace();165. }166.return content;167. }168.169./**170. * 解析二维码(QRCode)171. * @param input 输入流172. * @return173. */174.public String decoderQRCode(InputStream input) {175. BufferedImage bufImg = null;176. String content = null;177.try {178. bufImg = ImageIO.read(input);179. QRCodeDecoder decoder = new QRCodeDecoder();180. content = new String(decoder.decode(new TwoDimensionCodeImage(b ufImg)), "utf-8");181. } catch (IOException e) {182. System.out.println("Error: " + e.getMessage());183. e.printStackTrace();184. } catch (DecodingFailedException dfe) {185. System.out.println("Error: " + dfe.getMessage());186. dfe.printStackTrace();187. }188.return content;189. }190.191.public static void main(String[] args) {192. String imgPath = "G:/TDDOWNLOAD/Michael_QRCode.png";193. String encoderContent = "Hello 大大、小小,welcome to QRCode!" + "\nMyblog [ ]" + "\nEMail [ sjsky007@ ]";194. TwoDimensionCode handler = new TwoDimensionCode();195. handler.encoderQRCode(encoderContent, imgPath, "png");196.// try {197.// OutputStream output = new FileOutputStream(imgPath);198.// handler.encoderQRCode(content, output);199.// } catch (Exception e) {200.// e.printStackTrace();201.// }202. System.out.println("========encoder success");203.204.205. String decoderContent = handler.decoderQRCode(imgPath);206. System.out.println("解析结果如下:");207. System.out.println(decoderContent);208. System.out.println("========decoder success!!!");209. }210.}TwoDimensionCodeImage 类:二维码图片对象[java]view plaincopy1.package qrcode;2.3.import java.awt.image.BufferedImage;4.5.import jp.sourceforge.qrcode.data.QRCodeImage;6.7.public class TwoDimensionCodeImage implements QRCodeImage {8.9. BufferedImage bufImg;10.11.public TwoDimensionCodeImage(BufferedImage bufImg) {12.this.bufImg = bufImg;13. }14.15.@Override16.public int getHeight() {17.return bufImg.getHeight();18. }19.20.@Override21.public int getPixel(int x, int y) {22.return bufImg.getRGB(x, y);23. }24.25.@Override26.public int getWidth() {27.return bufImg.getWidth();28. }29.30.}1.java这边的话生成二维码有很多开发的jar包如zxing,qrcode.q前者是谷歌开发的后者则是小日本开发的,这里的话我使用zxing的开发包来弄2.先下载zxing开发包,这里用到的只是core那个jar包3.使用zxing开发还需要一个类,代码如下4.借助上面的类生成二维码Java代码实现二维码生成与解析 import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage; import java.io.File;import javax.imageio.ImageIO; import com.swetake.util.Qrcode;public class QRCodeEncoderTest {public static void main(String[] args) throws Exception { Qrcode qrcode=new Qrcode(); qrcode.setQrcodeErrorCorrect('M'); qrcode.setQrcodeEncodeMode('B'); qrcode.setQrcodeVersion(7); String testString = "_-+^%$#@!~`=&)*(";byte[] d =testString.getBytes("GBK");BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB); // createGra phicsGraphics2D g = bi.createGraphics(); // set backgroundg.setBackground(Color.WHITE); g.clearRect(0, 0, 139, 139); g.setColor(Color.BLACK);if (d.length>0 && d.length <123){ boolean[][] b = qrcode.calQrcode(d);for (int i=0;i<b.length;i++){for (int j=0;j<b.length;j++){ if (b[j][i]) {g.fillRect(j*3+2,i*3+2,3,3); } } } } g.dispose(); bi.flush();String FilePath="TestQRCode.png"; File f = new File(FilePath); ImageIO.write(bi, "png", f); Syst em.out.println("doned!"); } }import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage; import java.io.File;import javax.imageio.ImageIO; import com.swetake.util.Qrcode;public class QRCodeEncoderTest {public static void main(String[] args) throws Exception { Qrcode qrcode=new Qrcode();qrcode.setQrcodeErrorCorrect('M'); qrcode.setQrcodeEncodeMode('B'); qrcode.setQrcodeVersio n(7);String testString = "_-+^%$#@!~`=&)*(";byte[] d =testString.getBytes("GBK");BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB); //createGraphi cs Graphics2D g = bi.createGraphics(); // set background g.setBackground(Color.WHITE); g.clearR ect(0, 0, 139, 139); g.setColor(Color.BLACK);if (d.length>0 && d.length <123){ boolean[][] b = qrcode.calQrcode(d); for (int i=0;i<b.length;i++) {for (int j=0;j<b.length;j++){if (b[j][i]) { g.fillRect(j*3+2,i*3+2,3,3); } } } }g.dispose(); bi.flush();String FilePath="TestQRCode.png";File f = new File(FilePath); ImageIO.write(bi, "png", f); System.out.println("doned!"); } } 解码测试: Java代码import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;import java.io.UnsupportedEncodingException; import javax.imageio.ImageIO;import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.data.QRCodeIma ge;import jp.sourceforge.qrcode.exception.DecodingFailedException; public class QRCodeDecoder Test { public QRCodeDecoderTest() {public static void main(String[] args) {QRCodeDecoder decoder = new QRCodeDecoder(); File imageFile = new File("TestQRCode.png" ); BufferedImage image = null; try {image = ImageIO.read(imageFile);} catch (IOException e) {System.out.println("Error: "+ e.getMessage()); }try {String decodedData = new String(decoder.decode(new J2SEImage(image)),"GBK"); System.out. println(decodedData);} catch (DecodingFailedException dfe) { System.out.println("Error: " + dfe.getMessage()); } catc h (UnsupportedEncodingException e) { e.printStackTrace(); } } }class J2SEImage implements QRCodeImage { BufferedImage image;public J2SEImage(BufferedImage image) { this.image = image;}public int getWidth() { return image.getWidth(); }public int getHeight() { return image.getHeight(); }public int getPixel(int x, int y) { return image.getRGB(x, y); } }/// 生成二维码(利用dll)/// </summary>/// <param name="data">生成二维码数据</param>/// <param name="filename">图片名称</param>private void createcode(string data,string filename){//Image1.ImageUrl = "Qcodeimage.aspx?strs="+data;QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncoder.QRCodeScale = 3;qrCodeEncoder.QRCodeVersion = 8;qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//String data = "12345678abcdeftlljws#你好";System.Drawing.Bitmap image = qrCodeEncoder.Encode(data);System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(image.Width + 30, image.Height + 30);//这里是背景图片//bmp.SetPixel(0, 0, Color.White);System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp);g.Clear(Color.White);//把背景图片换成白色g.DrawImage(image, new Rectangle(15, 15, image.Width+5, image.Height+5), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);//Rectangle为15距离顶部和15左边的距离。
generateqrcode方法
generateqrcode方法介绍generateqrcode方法是一个用于生成二维码的函数。
二维码是一种矩阵条码,可以存储大量信息,包括文本、链接、电话号码等。
它已经成为了现代社会中非常重要的一种信息传递方式。
generateqrcode方法可以根据给定的输入参数生成一个二维码,并将其保存为图像文件。
功能generateqrcode方法的功能如下:1.接收一个字符串作为输入参数,用于生成二维码。
2.根据输入参数生成一个二维码图像。
3.将生成的二维码图像保存为图像文件。
使用方法generateqrcode方法的使用方法如下:generateqrcode(data, filename)其中,data是一个字符串,表示要生成二维码的内容;filename是一个字符串,表示要保存的图像文件名。
实现步骤generateqrcode方法的实现步骤如下:1.导入必要的模块,包括qrcode模块和PIL模块。
2.创建一个QRCode对象,用于生成二维码。
3.设置二维码的内容为输入参数中的字符串。
4.调用make方法生成二维码图像。
5.将生成的二维码图像保存为图像文件。
下面是generateqrcode方法的具体实现代码:import qrcodefrom PIL import Imagedef generateqrcode(data, filename):# 创建QRCode对象qr = qrcode.QRCode()# 设置二维码的内容qr.add_data(data)# 生成二维码图像qr.make()img = qr.make_image()# 保存二维码图像img.save(filename)示例下面是一个使用generateqrcode方法生成二维码的示例:data = ""filename = "qrcode.png"generateqrcode(data, filename)这个示例会生成一个包含指定链接的二维码,并将其保存为名为qrcode.png的图像文件。
如何用.NET生成二维码
如何用.NET生成二维码二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,北大青鸟中关村学士后本部常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。
二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包裹的管理、工业生产领域对工业生产线的自动化管理。
下面介绍一下如何用.NET生成二维码(QR Code码制),下面给出详细步骤:1、新建一个window应用程序,然后引入.NET二维码类库(开源的类库,可从网上下载):2、构建UI界面,代码如下:namespace WinQRCode{partial class Form1{/// <summary>/// 必需的设计器变量。
/// </summary>private ponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的资源。
/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。
</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗体设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要/// 使用代码编辑器修改此方法的内容。
C# 、VB 在Word中添加条码、二维码
C#/ 在Word中添加条码、二维码本文介绍如何通过C# 和代码实现在Word文档中添加条码和二维码。
代码中将分为在Word正文段落中、页眉页脚中等情况来添加。
使用工具:Free Spire.Office for .NET (免费版)工具简介:这是Spire所有.NET平台下免费产品的集合包,包含Spire.Barcode.dll、Spire.DataExport.dll、Spire.Pdf.dll、Spire.Doc.dll、Spire.DocViewer.Forms.dll 、Spire.PdfViewer.Forms.dll 、Spire.Presentation.dll 、Spire.XLS.dll等dll可用于操作Word/PDF/Excel/PPT等文件。
本文添加条码、二维码需要在VS程序中添加引用Spire.Doc.dll和Spire.Barcode.dll这两个dll 文件。
dll添加引用效果:注意:1. 需要下载安装到本地指定路径,dll文件可在安装路径下的Bin文件夹下获取。
2. 生成的条码、二维码会有水印字样的文字,可通过此方法去除。
代码示例1. 添加条码到WordC#using Spire.Doc;using Spire.Barcode;using System.Drawing;using System.IO;using Spire.Doc.Documents;namespace AddBarcode{class Program{static void Main(string[] args){//调用方法 ApplyKey(string key) 移除水印文字Spire.Barcode.BarcodeSettings.ApplyKey("在这里输入去除水印字样的序列号");//创建Document对象,加载Word文档Document doc = new Document();doc.LoadFromFile("test.docx");//获取第2节Section section = doc.Sections[1];//使用Spire.Barcode的BarcodeSettings和BarcodeGenerator类创建条码并保存为图片BarcodeSettings settings = new BarcodeSettings();settings.Type = BarCodeType.Code128;settings.Data = "123456789";settings.Data2D = "123456789";settings.ShowText = false;settings.BarHeight = 4;settings.X = 0.3f;settings.HasBorder = true;settings.BorderWidth = 0.5f;settings.BorderColor = Color.AliceBlue;settings.BackColor = Color.Wheat;BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);Image Image = barCodeGenerator.GenerateImage();//Image.Save("Barcode.png", System.Drawing.Imaging.ImageFormat.Png);//如果需要保存生成的Barcode图片,可执行此步骤代码//添加条码到正文段落Paragraph paragraph = section.AddParagraph();paragraph.Text = "收货码:";paragraph.AppendPicture(Image);paragraph.Format.HorizontalAlignment = HorizontalAlignment.Right;//添加条码图片到Word页脚HeaderFooter footer = section.HeadersFooters.Footer;Paragraph footerpara = footer.AddParagraph();footerpara.Text = "扫码识真伪:";footerpara.AppendPicture(Image);footerpara.Format.HorizontalAlignment = HorizontalAlignment.Left;//保存文档doc.SaveToFile("BarCodeToWord.docx", FileFormat.Docx2013);System.Diagnostics.Process.Start("BarCodeToWord.docx");}}}条码添加效果:Imports Spire.DocImports Spire.BarcodeImports System.DrawingImports System.IOImports Spire.Doc.DocumentsNamespace AddBarcodeClass ProgramPrivate Shared Sub Main(args As String())'调用方法ApplyKey(string key) 移除水印文字Spire.Barcode.BarcodeSettings.ApplyKey("在这里输入去除水印字样的序列号")'创建Document对象,加载Word文档Dim doc As New Document()doc.LoadFromFile("test.docx")'获取第2节Dim section As Section = doc.Sections(1)'使用Spire.Barcode的BarcodeSettings和BarcodeGenerator类创建条码并保存为图片Dim settings As New BarcodeSettings()settings.Type = BarCodeType.Code128settings.Data = "123456789"settings.Data2D = "123456789"settings.ShowText = Falsesettings.BarHeight = 4settings.X = 0.3Fsettings.HasBorder = Truesettings.BorderWidth = 0.5Fsettings.BorderColor = Color.AliceBluesettings.BackColor = Color.WheatDim barCodeGenerator As New BarCodeGenerator(settings)Dim Image As Image = barCodeGenerator.GenerateImage()'Image.Save("Barcode.png", System.Drawing.Imaging.ImageFormat.Png);//如果需要保存生成的Barcode图片,可执行此步骤代码'添加条码到正文段落Dim paragraph As Paragraph = section.AddParagraph()paragraph.Text = "收货码:"paragraph.AppendPicture(Image)paragraph.Format.HorizontalAlignment = HorizontalAlignment.Right'添加条码图片到Word页脚Dim footer As HeaderFooter = section.HeadersFooters.FooterDim footerpara As Paragraph = footer.AddParagraph()footerpara.Text = "扫码识真伪:"footerpara.AppendPicture(Image)footerpara.Format.HorizontalAlignment = HorizontalAlignment.Left'保存文档doc.SaveToFile("BarCodeToWord.docx", FileFormat.Docx2013)System.Diagnostics.Process.Start("BarCodeToWord.docx")End SubEnd ClassEnd Namespace2. 添加二维码到WordC#using Spire.Doc;using Spire.Barcode;using System.Drawing;using System.IO;using Spire.Doc.Documents;using System;namespace AddQRCode{class Program{static void Main(string[] args){//调用方法 ApplyKey(string key) 移除水印文字Spire.Barcode.BarcodeSettings.ApplyKey("在这里输入去除水印字样的序列号");//创建Document对象,加载Word文档Document doc = new Document();doc.LoadFromFile("test.docx");//获取第2节Section section = doc.Sections[1];//使用Spire.Barcode的BarcodeSettings和BarcodeGenerator类创建二维码并保存为图片BarcodeSettings settings = new BarcodeSettings();settings.Type = BarCodeType.QRCode;settings.ImageWidth = 50;settings.ImageHeight = 50;settings.Data = "123456";settings.Data2D = "123456";settings.X =0.7f;settings.LeftMargin = 1;settings.ShowTextOnBottom = true;settings.QRCodeECL = QRCodeECL.Q;settings.QRCodeDataMode = QRCodeDataMode.Numeric;BarCodeGenerator generator = new BarCodeGenerator(settings);Image image = generator.GenerateImage();//image.Save("QRCode.png", System.Drawing.Imaging.ImageFormat.Png);//如果需要保存生成的二维码图片,可执行此步骤代码//添加二维码到正文段落Paragraph paragraph = section.AddParagraph();paragraph.AppendPicture(image);paragraph.Format.HorizontalAlignment = HorizontalAlignment.Right;//添加二维码图片到Word页眉HeaderFooter header = section.HeadersFooters.Header;//HeaderFooter footer = section.HeadersFooters.Footer;//获取页脚Paragraph headerpara = header.AddParagraph();headerpara.AppendPicture(image);headerpara.Format.HorizontalAlignment = HorizontalAlignment.Center;//保存文档doc.SaveToFile("QRCodeToHeader.docx", FileFormat.Docx2013);System.Diagnostics.Process.Start("QRCodeToHeader.docx");}}}二维码添加效果:Imports Spire.DocImports Spire.BarcodeImports System.DrawingImports System.IOImports Spire.Doc.DocumentsNamespace AddQRCodeClass ProgramPrivate Shared Sub Main(args As String())'调用方法ApplyKey(string key) 移除水印文字Spire.Barcode.BarcodeSettings.ApplyKey("在这里输入去除水印字样的序列号")'创建Document对象,加载Word文档Dim doc As New Document()doc.LoadFromFile("test.docx")'获取第2节Dim section As Section = doc.Sections(1)'使用Spire.Barcode的BarcodeSettings和BarcodeGenerator类创建二维码并保存为图片Dim settings As New BarcodeSettings()settings.Type = BarCodeType.QRCodesettings.ImageWidth = 50settings.ImageHeight = 50settings.Data = "123456"settings.Data2D = "123456"settings.X = 0.7Fsettings.LeftMargin = 1settings.ShowTextOnBottom = Truesettings.QRCodeECL = QRCodeECL.Qsettings.QRCodeDataMode = QRCodeDataMode.NumericDim generator As New BarCodeGenerator(settings)Dim image As Image = generator.GenerateImage()'image.Save("QRCode.png", System.Drawing.Imaging.ImageFormat.Png);//如果需要保存生成的二维码图片,可执行此步骤代码'添加二维码到正文段落Dim paragraph As Paragraph = section.AddParagraph()paragraph.AppendPicture(image)paragraph.Format.HorizontalAlignment = HorizontalAlignment.Right'添加二维码图片到Word页眉Dim header As HeaderFooter = section.HeadersFooters.Header'HeaderFooter footer = section.HeadersFooters.Footer;//获取页脚Dim headerpara As Paragraph = header.AddParagraph()headerpara.AppendPicture(image)headerpara.Format.HorizontalAlignment = HorizontalAlignment.Center'保存文档doc.SaveToFile("QRCodeToHeader.docx", FileFormat.Docx2013)System.Diagnostics.Process.Start("QRCodeToHeader.docx")End SubEnd ClassEnd Namespace。
ASP.NET实现二维码(QRCode)的创建和读取
实现⼆维码(QRCode)的创建和读取⼀、项⽬引⽤QRCode的DLL⽂件(ThoughtWorks.QRCode.dll)⼆、ASPX页⾯(两个jquery的js⽂件请⾃⾏去官⽹下载):<html xmlns="/1999/xhtml"><head runat="server"><title>⼆维码⼯具测试</title><script type="text/javascript" src="../../Scripts/Jquery/jquery-1.6.2.js"></script><script type="text/javascript" src="../../Scripts/Jquery/jquery.form.js"></script><script type="text/javascript" src="js/test.js"></script><style type="text/css">.style1{width: 100%;}#txt_qr{width: 632px;}</style></head><body><div><table class="style1"><tr><td>输⼊⽂字:</td><td><input type="text" id="txt_qr" name="txt_qr" /></td></tr><tr><td>⼆维码图⽚</td><td><img id="qrimg" alt="⼆维码图⽚" /></td></tr><tr><td>⽣成选项</td><td>Encoding:<select id="Encoding"><option value="Byte">Byte</option><option value="AlphaNumeric">AlphaNumeric</option><option value="Numeric">Numeric</option></select>Correction Level:<select id="Level"><option value="M">M</option><option value="L">L</option><option value="Q">Q</option><option value="H">H</option></select>Version:<input id="txt_ver" type="text" value="7" />(1-40) Size:<input id="txt_size"type="text" value="4" /></td></tr><tr><td colspan="4"><input type="button" onclick="getQrImg();" value="⽣成⼆维码" /></td></tr><tr><td><form id="qrForm" action="Ashx/test.ashx" method="post" enctype="multipart/form-data"><input type="file" id="file_qr" name="file_qr" /><input type="submit" value="读取⼆维码" /></form></td><td colspan="1"><img id="img_qr" alt="要读取的图⽚" /><br /><input id="txt_readqr" type="text" /></td></tr></table></div></body></html> 三、test.js⽂件$(document).ready(function (){var options = {beforeSubmit: showRequest,success: showResponse,dataType: 'json',clearForm: true,error: function (request, message, ex){alert('错误:' + message);}};$('#qrForm').ajaxForm(options);});function showRequest(formData, jqForm, options){return true;}function showResponse(responseText, statusText, xhr, $form){if (responseText[0].count == 0){alert(responseText[0].list[0].error);return false;}$("#img_qr").attr("src", responseText[0].list[0].imgurl);$("#txt_readqr").val(responseText[0].list[0].qrtext);return false;}function getQrImg(){var txt_qr = escape($.trim($("#txt_qr").val()));var qrEncoding = $("#Encoding").val(); ;var Level = $("#Level").val(); ;var txt_ver = $("#txt_ver").val(); ;var txt_size = $("#txt_size").val(); ;$.ajax({type: "GET",data: "cmd=set&txt_qr=" + txt_qr + "&qrEncoding=" + qrEncoding + "&Level=" + Level + "&txt_ver=" + txt_ver + "&txt_size=" + txt_size, url: "Ashx/test.ashx",dataType: 'text',beforeSend: function (x){x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");},success: function (json){var dataObj = eval(json);$("#qrimg").attr("src", dataObj[0].list[0].imgurl);return false;},error: function (request, message, ex){alert("错误:" + message);}});} 四、test.ashx,没有判断⽬录是否存在等问题,请⾃⾏建⽴或者更改代码。
.Net生成二维码及签到系统使用说明
签到系统使用说明一、前言:本签到系统可用于签到、发放礼品等,各种需要按独立个人或独立单位处理事项的业务中。
二、特点:1、使用SQLite数据库存储数据,方便快捷;2、可动态配置用于处理的项目(如签到、发放礼品等),处理项目最少为一项;3、可自动生成二维码,并提供三种方式加密二维码;4、可将生成通过Excel导入的数据导出成Mysql脚本。
注:可在手机或平板电脑中集成扫描二维码,并发送相关信息至本系统,实现快捷签到三、运行方式:1、推荐运行环境:1)Windows 98以上系统,内存512以上,40G以上硬盘;2).netFramework3.0。
3)开发环境:VS2010。
2、下载.net Framwork: /showtopic-41409.html3、运行:1)运行【导入Excel并生成DB】文件夹下的InfowayProcessMeetingDbAndQRCode.exe,生成用于签到的SQLite库文件signDB.sdf,具体步骤见【四、使用步骤】;2)运行【依据DB签到】文件夹下的InfowayReceiveForm.exe,用于签到系统,具体步骤见【四、使用步骤】。
四、使用步骤:1、运行【导入Excel并生成DB】文件夹下的InfowayProcessMeetingDbAndQRCode.exe;2、如图1,点击导入数据工具按钮,选择【签到测试文档.xls】,若跳出如图2-2的对话框,则将【导入Excel并生成DB】文件夹下的删除或改名即可正常运行,导入数据时会在右上角部分显示如图2-3的进度条;图2-1 图2-2图2-33、导入成功后,右侧会自动显示Excel中的内容(过程中会有进度条显示导入进度);图3-14、此时可以在【配置信息】下的文本框中填写需要增加的签到项(如抽奖等),并点击【添加列】按钮,则在【添加列】按钮下方的表格中会添加上抽奖这一列(如图4-1和图4-2),同样,在【添加列】按钮下方的表格中选中某一列并右击会出现【删除列】的上下文菜单按钮,点击【删除列】后弹出如图4-2的对话框,点是则刚才增加的【抽奖】列就会被删除掉(如图4-3和图4-4)。
多种方式C#实现生成(条码二维码)
多种⽅式C#实现⽣成(条码⼆维码)C#通过第三⽅组件⽣成⼆维码(QR Code)和条形码(Bar Code)⽤C#如何⽣成⼆维码,我们可以通过现有的第三⽅dll直接来实现,下⾯列出⼏种不同的⽣成⽅法:1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:1.2):具体⽣成⼆维码⽅法如下private void GenerateQRByQrCodeNet(){QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);QrCode qrCode = new QrCode();qrEncoder.TryEncode("Hello World. This is Eric Sun Testing...", out qrCode);GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White);using (MemoryStream ms = new MemoryStream()){renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);Image img = Image.FromStream(ms);img.Save("E:/csharp-qrcode-net.png");}}更多详细信息请参考如下链接:2):通过ThoughtWorks.QRCode(ThoughtWorks.QRCode.dll)来实现1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:1.2):具体⽣成⼆维码⽅法如下private void GenerateQRByThoughtWorks(){QRCodeEncoder encoder = new QRCodeEncoder();encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码⽅式(注意:BYTE能⽀持中⽂,ALPHA_NUMERIC扫描出来的都是数字) encoder.QRCodeScale = 4;//⼤⼩(值越⼤⽣成的⼆维码图⽚像素越⾼)encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防⽌编码的字符串太长时发⽣错误)encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)encoder.QRCodeBackgroundColor = Color.Yellow;encoder.QRCodeForegroundColor = Color.Green;string qrdata = "Hello 世界! This is Eric Sun Testing....";Bitmap bcodeBitmap = encoder.Encode(qrdata.ToString());bcodeBitmap.Save(@"E:\HelloWorld.png", ImageFormat.Png);bcodeBitmap.Dispose();}3):通过Spire.BarCode(Spire.BarCode.dll)来实现1.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:1.2):具体⽣成⼆维码⽅法如下private void GenerateQRBySpire(){BarcodeSettings bs = new BarcodeSettings(){Data = "This is qr code: H2AMK-Z3V69-RTJZD-C7JAU-WILL4",Type = BarCodeType.QRCode,TopTextColor = Color.Red,ShowCheckSumChar = false,ShowText = false};//Generate the barcode based on the this.barCodeControl1BarCodeGenerator generator = new BarCodeGenerator(bs);Image barcode = generator.GenerateImage();//save the barcode as an imagebarcode.Save(@"E:\barcode-2d.png");}1.3):附加具体⽣成条形码⽅法如下private void GenerateBarCodeBySpire(){BarcodeSettings bs = new BarcodeSettings(){Data = "This is barcode: H2AMK-Z3V69-RTJZD-C7JAU-WILL4",ShowCheckSumChar = false,TopTextColor = Color.Red,ShowTopText = false,ShowTextOnBottom = true};//Generate the barcode based on the this.barCodeControl1BarCodeGenerator generator = new BarCodeGenerator(bs);Image barcode = generator.GenerateImage();//save the barcode as an imagebarcode.Save(@"E:\barcode.png");}1.3):上诉代码我们发现⽣成的条形码和⼆维码带有⽔印[E-ICEBLUE],如何去除⽔印呢?请看如下代码BarcodeSettings.ApplyKey("......");请发送邮件到 sales@ 免费获取对应的 key 值更多详细信息请参考如下链接:4):通过Barcode Rendering Framework(Zen.Barcode.Rendering.Framework.dll)来实现4.1):⾸先通过VS2015的NuGet下载对应的第三⽅组件,如下图所⽰:4.2):具体⽣成⼆维码⽅法如下private void GenerateBarCodeByZen(){Code128BarcodeDraw barcode128 = BarcodeDrawFactory.Code128WithChecksum;Image img = barcode128.Draw("Hello World", 40);img.Save("E:/zenbarcode.gif");}4.3):附加具体⽣成条形码⽅法如下private void GenerateQRByZen(){CodeQrBarcodeDraw qrcode = BarcodeDrawFactory.CodeQr;Image img = qrcode.Draw("Hello World!", qrcode.GetDefaultMetrics(40));img.Save("E:/zenqrcode.gif");}更多详细信息请参考如下链接:5.1):具体⽣成⼆维码⽅法如下private void GenerateQRByBarcodeLib(){QRCode qrbarcode = new QRCode();qrbarcode.Encoding = QRCodeEncoding.Auto;qrbarcode.Data = "336699885522 This is Eric Sun Testing.";qrbarcode.ModuleSize = 10;qrbarcode.LeftMargin = 8;qrbarcode.RightMargin = 8;qrbarcode.TopMargin = 8;qrbarcode.BottomMargin = 8;qrbarcode.ImageFormat = System.Drawing.Imaging.ImageFormat.Gif;// Save QR Code barcode image into your systemqrbarcode.drawBarcode("E:/csharp-qrcode-lib.gif");}5.2):附加具体⽣成条形码⽅法如下private void GenerateLinearByBarcodeLib(){Linear barcode = new Linear();barcode.Type = BarcodeType.CODE128;barcode.Data = "CODE128";// other barcode settings.// save barcode image into your systembarcode.drawBarcode("E:/barcode.png");}我们使⽤的是试⽤版(带⽔印的......),还有付费的正版,详情请参考如下链接:======================================================================================= Net Core ⽣成⼆维码⼀维码⼆维码包⽣成⼆维码帮助类public interface IQRCodeMoons: ISingletonDependency{Bitmap GetQRCode(string data, int pixel);byte[] GetQrCodeByteArray(string data, int pixel = 4);}///<summary>///⼆维码///</summary>public class QRCodeMoons: IQRCodeMoons{///<summary>///⽣成⼆维码///</summary>///<param name="url">存储内容</param>///<param name="pixel">像素⼤⼩</param>///<returns></returns>public Bitmap GetQRCode(string data, int pixel){QRCodeGenerator generator = new QRCodeGenerator();QRCodeData codeData = generator.CreateQrCode(data, QRCodeGenerator.ECCLevel.M, true);QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);return qrImage;}///<summary>///⽣成⼆维码并转成字节///</summary>///<param name="data"></param>///<param name="pixel"></param>///<returns></returns>public byte[] GetQrCodeByteArray(string data, int pixel = 4){var bitmap = GetQRCode(data, pixel);using (MemoryStream ms = new MemoryStream()){bitmap.Save(ms, ImageFormat.Jpeg);return ms.GetBuffer();}}}直接把byte[] 字节返回给前端前端通过img标签加载⼆维码<img "data:;base64,"+⼆维码字节数组 />前端通过img标签加载字节中的图⽚1.在angular中直接这样通过img加载会报错提⽰不安全的url 需要对这个url进⾏消毒进⾏安全监测 注⼊消毒对象private sanitizer: DomSanitizer 对当前地址进⾏消毒通过[src] 属性绑定的⽅式不能通过src='{{}}'这种⽅式绑定值如果对html本⽂进⾏绑定也需要通过bypassSecurityTrustHtml进⾏消毒this.imageByte= this.sanitizer.bypassSecurityTrustResourceUrl("data:;base64,"+result.qrCode)<img *ngIf="data" [src]="imageByte" />2.可以通过div 设置背景图⽚的⽅式避开这个问题但是调⽤js打印的时候⽆法加载背景图⽚<div [ngStyle]="{'background-image':'url(data:;base64,'+data.qrCode+')'}"></div><img width="75px" src="data:;base64,{{data.qrCode}}" />⼀维码包⽣成⼀维码帮助类public interface IBarCodeMoons : ISingletonDependency{Image GetBarCode(string data);byte[] GetBarCodeByteArray(string data);}///<summary>///⼀维码///</summary>public class BarCodeMoons: IBarCodeMoons{///<summary>///⽣成⼀维码///</summary>///<param name="data">存储内容</param>///<returns></returns>public Image GetBarCode(string data){BarcodeLib.Barcode b = new BarcodeLib.Barcode();Image img = b.Encode(BarcodeLib.TYPE.CODE128, data, Color.Black, Color.White, 290, 120);return img;}///<summary>///⽣成⼀维码并转成字节///</summary>///<param name="data"></param>///<returns></returns>public byte[] GetBarCodeByteArray(string data){var img = GetBarCode(data);using (MemoryStream ms = new MemoryStream()){img.Save(ms, ImageFormat.Jpeg);return ms.GetBuffer();}}}=======================================================================================C# 利⽤BarcodeLib.dll⽣成条形码(⼀维,zxing,QrCodeNet/dll⼆维码)⾸先效果:1.BarcodeLib.dll ⼀维条码库⽀持以下条码格式UPC-AUPC-EUPC 2 Digit Ext.UPC 5 Digit Ext.EAN-13JAN-13EAN-8ITF-14CodabarPostNetBookland/ISBNCode 11Code 39Code 39 ExtendedCode 93LOGMARSMSIInterleaved 2 of 5Standard 2 of 5Code 128Code 128-ACode 128-BCode 128-CTelepen然后项⽬中添加引⽤1.private void button6_Click(object sender, EventArgs e)2.{3.System.Drawing.Image image;4.int width = 148, height = 55;5.string fileSavePath = AppDomain.CurrentDomain.BaseDirectory + "BarcodePattern.jpg";6.if (File.Exists(fileSavePath))7.File.Delete(fileSavePath);8.GetBarcode(height, width, BarcodeLib.TYPE.CODE128, "20131025-136", out image, fileSavePath);9.10.pictureBox1.Image = Image.FromFile("BarcodePattern.jpg");11.}12.public static void GetBarcode(int height, int width, BarcodeLib.TYPE type, string code, out System.Drawing.Image image, string fileSaveUrl)13.{14.try15.{16.image = null;17.BarcodeLib.Barcode b = new BarcodeLib.Barcode();18.b.BackColor = System.Drawing.Color.White;//图⽚背景颜⾊19.b.ForeColor = System.Drawing.Color.Black;//条码颜⾊20.b.IncludeLabel = true;21.b.Alignment = BarcodeLib.AlignmentPositions.LEFT;22.belPosition = belPositions.BOTTOMCENTER;23.b.ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg;//图⽚格式24.System.Drawing.Font font = new System.Drawing.Font("verdana", 10f);//字体设置25.belFont = font;26.b.Height = height;//图⽚⾼度设置(px单位)27.b.Width = width;//图⽚宽度设置(px单位)29.image = b.Encode(type, code);//⽣成图⽚30.image.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);31.32.}33.catch (Exception ex)34.{35.36.image = null;37.}38.}ZXing (ZebraCrossing)是⼀个开源的,⽀持多种格式的条形码图像处理库,。
草料二维码在线生成工具
草料二维码在线生成工具
简介
主要功能
文本转二维码
用户可以将任意文本转换为二维码。
只需在工具网页的文本转
二维码功能中输入文本内容,点击生成按钮,即可立即生成相应的
二维码。
用户还可以选择生成的二维码的大小和颜色,以满足个性
化的需求。
联系方式转二维码
用户可以将电话号码、电子邮箱等联系方式转换为二维码,方
便他人通过扫描二维码添加联系方式。
在联系方式转二维码功能中,用户只需输入联系方式并点击生成按钮,即可生成相应的二维码。
多种输出格式
草料二维码在线生成工具支持多种输出格式,满足用户的需求。
用户可以选择将生成的二维码保存为图片文件(如PNG、JPEG等
格式),也可以直接复制生成的二维码图片,粘贴到其他应用程序
中使用。
使用步骤
1. 打开草料二维码在线生成工具网页。
3. 根据需要选择二维码大小和颜色。
4. 点击生成按钮,等待生成二维码。
5. 根据需要,选择保存二维码为图片文件或直接复制二维码图片。
注意事项
- 请不要在生成二维码中包含敏感或私人信息,以免泄露。
- 请注意生成的二维码的尺寸和清晰度,以保证扫描的效果。
- 确认二维码的正确性,防止因错误信息而造成不便。
.NETC#利用ZXing生成、识别二维码条形码
.NETC#利⽤ZXing⽣成、识别⼆维码条形码⼀、⾸先下载 然后将对应版本 .dll 拖⼊项⽬中,再引⽤之。
主要是⽤ BarcodeWriter、BarcodeReader。
⼆、⽣成⼆维码.NET 平台的代码始终要简单些。
QrCodeEncodingOptions options = new QrCodeEncodingOptions();options.CharacterSet = "UTF-8";options.DisableECI = true; // Extended Channel Interpretation (ECI) 主要⽤于特殊的字符集。
并不是所有的扫描器都⽀持这种编码。
options.ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H; // 纠错级别options.Width = 300;options.Height = 300;options.Margin = 1;// options.Hints,更多属性,也可以在这⾥添加。
BarcodeWriter writer = new BarcodeWriter();writer.Format = BarcodeFormat.QR_CODE;writer.Options = options;Response.Clear();using (Bitmap bmp = writer.Write("")) // Write 具备⽣成、写⼊两个功能{MemoryStream ms = new MemoryStream();{bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);Response.ContentType = "image/png";Response.BinaryWrite(ms.ToArray());}}Response.End();纠错级别:1. L - 约 7% 纠错能⼒。
微信小程序代码生成二维码
微信小程序代码生成二维码微信小程序作为一种轻量级的应用形式,具有快速、便捷的特点,越来越受到开发者和用户的青睐。
其中,生成二维码是小程序中常见的功能之一,通过二维码可以快速实现用户之间信息的传输、网页的跳转以及其他多种功能。
本文将详细介绍在微信小程序中如何实现代码生成二维码的方法和步骤。
一、准备工作在实现生成二维码的功能之前,我们需要先完成一些准备工作。
首先,确保你已经具备微信小程序开发的基础知识,了解小程序的目录结构和基本操作。
其次,需要在小程序的app.json配置文件中添加相应的权限设置,以便使用微信小程序的API来生成二维码。
二、生成二维码的实现步骤1. 引入相关API在小程序的wxml文件中引入canvas和image组件,用于生成和显示二维码。
在js文件中引入wx.createCanvasContext方法,用于创建一个canvas绘图上下文对象。
// 在js文件中引入APIconst ctx =wx.createCanvasContext('qrcodeCanvas');2. 绘制二维码使用canvas绘图 API 来绘制二维码。
我们可以通过设置二维码的大小、内容等属性来生成一个自定义的二维码。
// 绘制二维码ctx.drawImage('/images/qrcode.png',0,0,200,200);ctx.draw();3. 保存二维码绘制完成二维码后,可以将其保存为一张图片文件,方便用户进行保存和分享。
// 将canvas转换为图片文件wx.canvasToTempFilePath({canvasId:'qrcodeCanvas',success:function(res) {console.log(res.tempFilePath);}});三、使用二维码生成的二维码可以用于多种用途,比如扫描后跳转到指定页面、展示特定信息等。
生成二维码的两种方式
⽣成⼆维码的两种⽅式今天项⽬上做了⼀个⼆维码的功能,在此记录⼀下。
功能描述点击⼀个超链接,弹出展⽰⼆维码的弹出框。
准备⾸先下载好⽣成⼆维码需要使⽤到的jar包,下载地址:将下载好的jar包导⼊项⽬,将以下⼯具类放到项⽬中:package com.util;import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import com.google.zxing.LuminanceSource;public class BufferedImageLuminanceSource extends LuminanceSource {private final BufferedImage image;private final int left;private final int top;public BufferedImageLuminanceSource(BufferedImage image) {this(image, 0, 0, image.getWidth(), image.getHeight());}public BufferedImageLuminanceSource(BufferedImage image, int left, int top, int width, int height) {super(width, height);int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();if (left + width > sourceWidth || top + height > sourceHeight) {throw new IllegalArgumentException("Crop rectangle does not fit within image data.");}for (int y = top; y < top + height; y++) {for (int x = left; x < left + width; x++) {if ((image.getRGB(x, y) & 0xFF000000) == 0) {image.setRGB(x, y, 0xFFFFFFFF); // = white}}}this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);this.image.getGraphics().drawImage(image, 0, 0, null);this.left = left;this.top = top;}public byte[] getRow(int y, byte[] row) {if (y < 0 || y >= getHeight()) {throw new IllegalArgumentException("Requested row is outside the image: " + y);}int width = getWidth();if (row == null || row.length < width) {row = new byte[width];}image.getRaster().getDataElements(left, top + y, width, 1, row);return row;}public byte[] getMatrix() {int width = getWidth();int height = getHeight();int area = width * height;byte[] matrix = new byte[area];image.getRaster().getDataElements(left, top, width, height, matrix);return matrix;}public boolean isCropSupported() {return true;}public LuminanceSource crop(int left, int top, int width, int height) {return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height);}public boolean isRotateSupported() {return true;}public LuminanceSource rotateCounterClockwise() {int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);Graphics2D g = rotatedImage.createGraphics();g.drawImage(image, transform, null);g.dispose();int width = getWidth();return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);}}package com.util;import java.awt.BasicStroke;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Shape;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.util.Hashtable;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletResponse;import com.google.zxing.BarcodeFormat;import com.google.zxing.BinaryBitmap;import com.google.zxing.DecodeHintType;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatReader;import com.google.zxing.MultiFormatWriter;import com.google.zxing.Result;import com.google.zxing.WriterException;import mon.BitMatrix;import mon.HybridBinarizer;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class QRCodeUtil {private static final String CHARSET = "utf-8";private static final String FORMAT_NAME = "JPG";// ⼆维码尺⼨private static final int QRCODE_SIZE = 300;// LOGO宽度private static final int WIDTH = 60;// LOGO⾼度private static final int HEIGHT = 60;private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception {Hashtable hints = new Hashtable();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.CHARACTER_SET, CHARSET);hints.put(EncodeHintType.MARGIN, 1);BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);}}if (imgPath == null || "".equals(imgPath)) {return image;}// 插⼊图⽚QRCodeUtil.insertImage(image, imgPath, needCompress);return image;}private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception {File file = new File(imgPath);if (!file.exists()) {System.err.println("" + imgPath + " 该⽂件不存在!");return;}Image src = ImageIO.read(new File(imgPath));int width = src.getWidth(null);int height = src.getHeight(null);if (needCompress) { // 压缩LOGOif (width > WIDTH) {width = WIDTH;}if (height > HEIGHT) {height = HEIGHT;}Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩⼩后的图g.dispose();src = image;}// 插⼊LOGOGraphics2D graph = source.createGraphics();int x = (QRCODE_SIZE - width) / 2;int y = (QRCODE_SIZE - height) / 2;graph.drawImage(src, x, y, width, height, null);Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);graph.setStroke(new BasicStroke(3f));graph.draw(shape);graph.dispose();}public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);mkdirs(destPath);// String file = new Random().nextInt(99999999)+".jpg";// ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));ImageIO.write(image, FORMAT_NAME, new File(destPath));}public static BufferedImage encode(String content, String imgPath, boolean needCompress) throws Exception {BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);return image;}public static void mkdirs(String destPath) {File file = new File(destPath);// 当⽂件夹不存在时,mkdirs会⾃动创建多层⽬录,区别于mkdir.(mkdir如果⽗⽬录不存在则会抛出异常)if (!file.exists() && !file.isDirectory()) {file.mkdirs();}}public static void encode(String content, String imgPath, String destPath) throws Exception {QRCodeUtil.encode(content, imgPath, destPath, false);}// 被注释的⽅法/** public static void encode(String content, String destPath, boolean* needCompress) throws Exception { QRCodeUtil.encode(content, null, destPath,* needCompress); }*/public static void encode(String content, String destPath) throws Exception {QRCodeUtil.encode(content, null, destPath, false);}public static void encode(String content, String imgPath, OutputStream output, boolean needCompress) throws Exception {BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);ImageIO.write(image, FORMAT_NAME, output);}public static void encode(String content, OutputStream output) throws Exception {QRCodeUtil.encode(content, null, output, false);}public static String decode(File file) throws Exception {BufferedImage image;image = ImageIO.read(file);if (image == null) {return null;}BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));Result result;Hashtable hints = new Hashtable();hints.put(DecodeHintType.CHARACTER_SET, CHARSET);result = new MultiFormatReader().decode(bitmap, hints);String resultStr = result.getText();return resultStr;}public static String decode(String path) throws Exception {return QRCodeUtil.decode(new File(path));}public static void creatRrCode(String contents, int width, int height,HttpServletResponse response) {Hashtable hints = new Hashtable();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //容错级别最⾼hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //设置字符编码hints.put(EncodeHintType.MARGIN, 1); //⼆维码空⽩区域,最⼩为0也有⽩边,只是很⼩,最⼩是6像素左右try {BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints); // 1、读取⽂件转换为字节数组// ByteArrayOutputStream out = new ByteArrayOutputStream();BufferedImage image = toBufferedImage(bitMatrix);//转换成png格式的IO流ImageIO.write(image, "png", response.getOutputStream());// byte[] bytes = out.toByteArray();//// 2、将字节数组转为⼆进制// BASE64Encoder encoder = new BASE64Encoder();// binary = encoder.encodeBuffer(bytes).trim();} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** image流数据处理** @author ianly*/public static BufferedImage toBufferedImage(BitMatrix matrix) {int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);}}return image;}}1.后台⽣成⼆维码图⽚并保存图⽚超链接以及js代码如下:[<a href="#" onclick="showCode('<%=barcode%>')" class="unline">⼆维码</a>]//⽣成⼆维码⽅法function showCode(barcode){yer.open({type: 2,title:'',cancel: function(){},area: ['300px', '300px'],fixed: false, //不固定maxmin: false,Boolean: false,content: '<%=request.getContextPath()%>/frame/showCode.do?barcode='+barcode});}后台⽣成⼆维码的代码:/*** ⽣成⼆维码*/public String showCode() {try {String barcode = request.getParameter("barcode");request.setAttribute("barcode", barcode);("barcode-------------"+barcode);// 存放在⼆维码中的内容String text = "http://127.0.0.1:8080/扫描后需要调⽤的地址?barcode="+barcode;// 嵌⼊⼆维码的图⽚路径String imgPath = "D:/md5file/20191119181532.jpg";// ⽣成的⼆维码的路径及名称String destPath = "D:/md5file/"+barcode+".jpg";//⽣成⼆维码QRCodeUtil.encode(text, imgPath, destPath, true);// 解析⼆维码String str = QRCodeUtil.decode(destPath);// 打印出解析出的内容System.out.println(str);} catch (Exception e) {e.printStackTrace();}return "showCode";}展⽰⼆维码的容器:<!-- 存放⼆维码的容器 --><img src="⼆维码图⽚保存的地址"/>2.页⾯实时⽣成⼆维码展⽰超链接以及点击事件⽅法:[<a href="#" onclick="showCode('<%=mywork.getFormcode()%>')" class="unline">⼆维码</a>] //展⽰⼆维码function showCode(barcode){yer.open({type: 2,title:'',cancel: function(){},area: ['300px', '300px'],fixed: false, //不固定maxmin: false,Boolean: false,content: '<%=request.getContextPath()%>/jsp/frame/mywork/showCode.jsp?barcode='+barcode });}此处是点击超链接直接跳到弹框页⾯,在弹框页⾯上调后台⽣成⼆维码:public void qrcode() {String barcode = request.getParameter("barcode");String content = 扫描⼆维码需要调⽤的后台地址?barcode="+barcode;//调⽤⼯具类,⽣成⼆维码QRCodeUtil.creatRrCode(content, 300,300,response); //300为图⽚⾼度和宽度}弹框页⾯代码:<%String barcode = request.getParameter("barcode");request.setAttribute("barcode", barcode);%><body><input type="hidden" name="barcode" id="barcode" value="${barcode}"><!-- 存放⼆维码的容器 --><img src="<%=request.getContextPath()%>/frame/qrcode.do?barcode=${barcode}"/></body>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何用.NET生成二维码二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。
北大青鸟中关村学士后本部二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包裹的管理、工业生产领域对工业生产线的自动化管理。
下面介绍一下如何用.NET生成二维码(QR Code码制),下面给出详细步骤:1、新建一个window应用程序,然后引入.NET二维码类库(开源的类库,可从网上下载):2、构建UI界面,代码如下:space WinQRCode2.{3. partial class Form14. {5./// <summary>6./// 必需的设计器变量。
7./// </summary>8.private ponentModel.IContainer components = null; 9.10./// <summary>11./// 清理所有正在使用的资源。
北大青鸟中关村学士后本部12./// </summary>13./// <param name="disposing">如果应释放托管资源,为 true;否则为 false。
</param>14.protected override void Dispose(bool disposing)15.{16.if (disposing && (components != null))17.{18. components.Dispose();19.}20.base.Dispose(disposing);21.}22.23.#region Windows 窗体设计器生成的代码24.25./// <summary>26./// 设计器支持所需的方法 - 不要27./// 使用代码编辑器修改此方法的内容。
28./// </summary>29.private void InitializeComponent()30.{31.this.button1 = new System.Windows.Forms.Button();32.this.button2 = new System.Windows.Forms.Button();33.this.pictureBox1 = newSystem.Windows.Forms.PictureBox();bel1 = new bel();35.this.textBox1 = new System.Windows.Forms.TextBox();bel2 = new bel();37.this.lbl解码信息 = new bel();38.((ponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();39.this.SuspendLayout();40.//41.// button142.//43.this.button1.Location = new System.Drawing.Point(446,31);System.Windows.Forms.Padding(4, 5, 4, 5); = "button1";46.this.button1.Size = new System.Drawing.Size(103, 37);47.this.button1.TabIndex = 0;48.this.button1.Text = "编码";eVisualStyleBackColor = true;50.this.button1.Click += newSystem.EventHandler(this.button1_Click);51.//52.// button2北大青鸟中关村学士后本部53.//54.this.button2.Location = new System.Drawing.Point(446,81);55.this.button2.Margin = newSystem.Windows.Forms.Padding(4, 5, 4, 5); = "button2";57.this.button2.Size = new System.Drawing.Size(103, 37);58.this.button2.TabIndex = 1;59.this.button2.Text = "解码";eVisualStyleBackColor = true;61.this.button2.Click += new 北大青鸟中关村学士后本部System.EventHandler(this.button2_Click);62.//63.// pictureBox164.//65.this.pictureBox1.Location = newSystem.Drawing.Point(23, 117);66.this.pictureBox1.Margin = newSystem.Windows.Forms.Padding(4, 5, 4, 5); = "pictureBox1";68.this.pictureBox1.Size = new System.Drawing.Size(279,253);69.this.pictureBox1.SizeMode =System.Windows.Forms.PictureBoxSizeMode.StretchImage;70.this.pictureBox1.TabIndex = 2;71.this.pictureBox1.TabStop = false;72.//73.// label174.//bel1.AutoSize = true;bel1.Location = new System.Drawing.Point(18,39);System.Windows.Forms.Padding(4, 0, 4, 0); = "label1";bel1.Size = new System.Drawing.Size(69, 25);bel1.TabIndex = 3;bel1.Text = "信息:";82.//83.// textBox184.//85.this.textBox1.Location = new System.Drawing.Point(95,37);86.this.textBox1.Margin = newSystem.Windows.Forms.Padding(4, 5, 4, 5); = "textBox1";88.this.textBox1.Size = new System.Drawing.Size(333, 31);89.this.textBox1.TabIndex = 4;90.//91.// label292.//bel2.AutoSize = true;bel2.Location = new System.Drawing.Point(18,81);bel2.Margin = newSystem.Windows.Forms.Padding(4, 0, 4, 0); = "label2";北大青鸟中关村学士后本部bel2.Size = new System.Drawing.Size(88, 25);bel2.TabIndex = 5;bel2.Text = "二维码:";100.//101.// lbl解码信息102.//103.this.lbl解码信息.AutoSize = true;104.this.lbl解码信息.Location = newSystem.Drawing.Point(101, 81);105.this.lbl解码信息.Margin = newSystem.Windows.Forms.Padding(4, 0, 4, 0);106.this.lbl解码信息.Name = "lbl解码信息";107.this.lbl解码信息.Size = new System.Drawing.Size(0,25);108.this.lbl解码信息.TabIndex = 6;109.//110.// Form1111.//112.this.AutoScaleDimensions = newSystem.Drawing.SizeF(11F, 24F);113.this.AutoScaleMode =System.Windows.Forms.AutoScaleMode.Font;114.this.ClientSize = new System.Drawing.Size(572, 384); 115.this.Controls.Add(this.lbl解码信息);116.this.Controls.Add(bel2);117.this.Controls.Add(this.textBox1);118.this.Controls.Add(bel1);119.this.Controls.Add(this.pictureBox1);120.this.Controls.Add(this.button2);121.this.Controls.Add(this.button1);122.this.Font = new System.Drawing.Font("微软雅黑", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));123.this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); = "Form1";125.this.Text = "二维码";北大青鸟中关村学士后本部126.((ponentModel.ISupportInitialize)(this.pi ctureBox1)).EndInit();127.this.ResumeLayout(false);128.this.PerformLayout();129.130.}131.132.#endregion133.134.private System.Windows.Forms.Button button1;135.private System.Windows.Forms.Button button2;136.private System.Windows.Forms.PictureBox pictureBox1;137.private bel label1;138.private System.Windows.Forms.TextBox textBox1;139.private bel label2;140.private bel lbl解码信息;141. }142.}图形如下所示:3、编写编码和解码按钮事件,进行编码和解码处理:北大青鸟中关村学士后本部ing System;ing System.Collections.Generic;ing ponentModel;ing System.Data;ing System.Drawing;ing System.Linq;ing System.Text;ing System.Windows.Forms;9.space WinQRCode11.{12. using ThoughtWorks.QRCode.Codec;13. using ThoughtWorks.QRCode.Codec.Data;14. using ThoughtWorks.QRCode.Codec.Util;15. using System.IO;16. using PdfToImage;17. public partial class Form1 : Form18. {19.public Form1()20.{21.InitializeComponent();22.}23./// <summary>24./// 编码25./// </summary>26./// <param name="sender"></param>27./// <param name="e"></param>28.private void button1_Click(object sender, EventArgs e)29.{30.if (this.textBox1.Text != "")31.{32. Cursor.Current = Cursors.WaitCursor;33. if (textBox1.Text.Trim() == String.Empty)34. {35.MessageBox.Show("不能为空.");36.return;37. }38. QRCodeEncoder qrCodeEncoder = newQRCodeEncoder();39. qrCodeEncoder.QRCodeEncodeMode =QRCodeEncoder.ENCODE_MODE.BYTE;40. qrCodeEncoder.QRCodeScale = 4;41. qrCodeEncoder.QRCodeVersion =7;42.qrCodeEncoder.QRCodeErrorCorrect =QRCodeEncoder.ERROR_CORRECTION.M;43. System.Drawing.Image image;44. String data = textBox1.Text;45. //编码46. image = qrCodeEncoder.Encode(data);47. //图片显示48. this.pictureBox1.Image = image;49. Cursor.Current = Cursors.Default;50.51.}52.}53./// <summary>54./// 解码55./// </summary>56./// <param name="sender"></param>57./// <param name="e"></param>58.private void button2_Click(object sender, EventArgs e)59.{60.Cursor.Current = Cursors.WaitCursor;61.Bitmap b = this.pictureBox1.Image as Bitmap;62.try63.{64. QRCodeDecoder decoder = new QRCodeDecoder();65. //解码66. String decodedString = decoder.decode(newQRCodeBitmapImage(b));67. //显示解码信息北大青鸟中关村学士后本部68. this.lbl解码信息.Text += decodedString ;69.}70.catch (Exception ex)71.{72. MessageBox.Show(ex.Message);73.}74.Cursor.Current = Cursors.Default;75.}76.77.private void Form1_Load(object sender, EventArgs e)78.{79.80.}81. }82.}4、编译运行,如下图:。