关于QRCode生成二维码(背景图、Logo)
来源:互联网 发布:知乎 二十年目睹怪现状 编辑:程序博客网 时间:2024/04/29 01:50
关于QRCode生成二维码的代码
/// <summary> /// 创建二维码 /// </summary> /// <param name="QRString">二维码字符串</param> /// <param name="QRCodeEncodeMode">二维码编码(Byte、AlphaNumeric、Numeric)</param> /// <param name="QRCodeScale">二维码尺寸(Version为0时,1:26x26,每加1宽和高各加25</param> /// <param name="QRCodeVersion">二维码密集度0-40</param> /// <param name="QRCodeErrorCorrect">二维码纠错能力(L:7% M:15% Q:25% H:30%)</param> /// <param name="filePath">保存路径</param> /// <param name="hasLogo">是否有logo(logo尺寸50x50,QRCodeScale>=5,QRCodeErrorCorrect为H级)</param> /// <param name="logoFilePath">logo路径</param> /// <returns></returns> public static bool CreateQRCode(string QRString, string QRCodeEncodeMode, short QRCodeScale, int QRCodeVersion, string QRCodeErrorCorrect, string filePath, bool hasLogo, string logoFilePath,bool hasBack, string backFilePath,string backName, string fileName) { bool result = true; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); switch (QRCodeEncodeMode) { case "Byte": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; break; case "AlphaNumeric": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC; break; case "Numeric": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC; break; default: qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; break; } qrCodeEncoder.QRCodeScale = QRCodeScale; qrCodeEncoder.QRCodeVersion = QRCodeVersion; switch (QRCodeErrorCorrect) { case "L": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; break; case "M": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; break; case "Q": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q; break; case "H": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; break; default: qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; break; } try { if (hasBack) { //抓取背景图片复制到新文件夹并命名 File.Copy(backFilePath, filePath + fileName); //生成二维码图片 Image image_b = qrCodeEncoder.Encode(QRString, System.Text.Encoding.UTF8); System.IO.FileStream fs_b = new System.IO.FileStream(filePath + backName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); //存储二维码图片 image_b.Save(fs_b, System.Drawing.Imaging.ImageFormat.Jpeg); //关闭IO fs_b.Close(); //将二维码图片转化为Image对象 Image copyImage = Image.FromFile(filePath + backName); //创建FileStream FileStream fs = new FileStream(filePath + fileName, FileMode.Open, FileAccess.Read, FileShare.Read); //将背景图片转化为二进制数据 byte[] buffer = new byte[fs.Length]; int length = 0; int ibyteRead = 0; do { length = fs.Read(buffer, ibyteRead, buffer.Length - ibyteRead); ibyteRead += length; } while (length > 0); MemoryStream mfs = new MemoryStream(buffer); //关闭创建FileStream fs.Close(); fs.Dispose(); //创建画布 Image bmp = Image.FromStream(mfs); //创建Graphics类 Graphics g = Graphics.FromImage(bmp); //设定坐标 int x = bmp.Width / 2 - copyImage.Width / 2; int y = ((bmp.Height / 5)*4)/2 - copyImage.Height / 2; //开始在背景图上将画二维码 g.DrawImage(copyImage, new Rectangle(x, y, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel); g.Dispose(); //保存画好的图片 bmp.Save(filePath + fileName); copyImage.Dispose(); //删除生成的二维码图片 if (File.Exists(filePath + backName)) { File.Delete(filePath + backName); } } else { Image image = qrCodeEncoder.Encode(QRString, System.Text.Encoding.UTF8); System.IO.FileStream fs = new System.IO.FileStream(filePath + fileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); if (hasLogo) { Image copyImage = System.Drawing.Image.FromFile(logoFilePath); Graphics g = Graphics.FromImage(image); int x = image.Width / 2 - copyImage.Width / 2; int y = image.Height / 2 - copyImage.Height / 2; g.DrawImage(copyImage, new Rectangle(x, y, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel); g.Dispose(); image.Save(filePath + fileName); copyImage.Dispose(); } image.Dispose(); } } catch (Exception ex) { result = false; } return result; }
使用本方法时请先调用ThougtWorks.QRCode.dll
阅读全文
0 0
- 关于QRCode生成二维码(背景图、Logo)
- java ,jquery 生成 qrcode 二维码带Logo
- jquery-qrcode生成带logo的二维码
- QRCode生成二维码并带有logo图片
- 生成二维码(QRCode)图片加LOGO
- Qrcode生成二维码(logo篇)之jquery.qrcode.min.js
- Qrcode生成二维码(logo篇)之jquery.qrcode.min.js
- Qrcode生成二维码(logo篇)之jquery.qrcode.min.js
- java利用qrcode生成带有logo的二维码(logo位置及大小自己调)
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
- 使用jquery.qrcode.min.js实现前台二维码生成(带Logo)
- 用QRCode生成带有中间logo图的二维码
- php使用qrcode 生成带logo的二维码
- c# QRCode生成二维码 web 可带logo
- Java并发编程实战(学习笔记十一 第十二章 并发程序的测试)
- CF 19D Points 【线段树+平衡树】
- iOS实录5:iOS中本地图片的缩放、裁剪和压缩
- oracle中的decode函数
- Redis:redis远程访问控制
- 关于QRCode生成二维码(背景图、Logo)
- import 和import static
- TWaver可视化编辑器(四)电力 云计算 数据中心
- ssm中maven中profiles多环境配置
- Vue2.0 探索之路——生命周期和钩子函数的一些理解
- robot framework should contain网页标题判断
- 绝对定位和overflow-y: scroll实现不使用fixed固定定位将元素固定在页面顶部或底部
- iOS object-c语言使用SQLite数据库增删改查
- 《第一行代码》Fragment学习笔记