二维码生成方法

从网上到处找代码东拼西凑出来的一个二维码生成方法,支持给二维码上面贴图标。

需要通过Nuget引用QRCode.Net

先贴个调用的Demo吧,直接从项目中拷过来的,看意思就好。

  public string GetUserQRCode(Web_User user)
        {
          var url = VirtualPaths.HostAddress + "/Member/MemberSpaceAddFriend?name=" + user.Name;
            string userHeadphoto = "";
            //如果用户的头像不为空,则给二维码加上用户头像
            if (!string.IsNullOrEmpty(user.HeadPhoto))
            {
                 userHeadphoto= VirtualPaths.ImgDir+user.HeadPhoto;
            }
            var path = VirtualPaths.ImgDir+ "/Upload/QRCode/";
            string qrCode = SaveCodeImg(url, userHeadphoto, path);
            user.QRCode = "/Upload/QRCode/" + qrCode;
           UpdateUser(user);
            return user.QRCode;
        }

调用的Demo

    #region 二维码生成基础方法
        /// <summary>
        /// 生成用户信息的二维码
        /// </summary>
        /// <param name="url">要生成的字符串</param>
        /// <param name="headPhoto">要贴到二维码上面的头像</param>
        /// <param name="filePath">文件的保存路径</param>
        /// <returns></returns>
        public string SaveCodeImg(string url, string headPhoto, string filePath)
        {
            var fileName = GetFileNameByDate();
            var path = Path.Combine(filePath, fileName);
            QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
            QrCode qrCode = new QrCode();
            qrEncoder.TryEncode(url, out qrCode);
            var renderer = new GraphicsRenderer(new FixedModuleSize(4, QuietZoneModules.Two));
            //var image = new Bitmap();
            Image img = new Bitmap(200, 200);
            Image qrcode = new Bitmap(200, 200);
            using (Graphics g = Graphics.FromImage(img))
            {
                renderer.Draw(g, qrCode.Matrix);
                g.DrawImage(img, new Point { X = 0, Y = 0 });
                //using (MemoryStream stream = new MemoryStream())
                //{
                //    img.Save(stream, ImageFormat.Jpeg);
                //}
                if (string.IsNullOrEmpty(headPhoto) || !File.Exists(headPhoto))
                {
                   // img.Save(path+".jpg");
                    qrcode = img;
                    qrcode.Save(path+".jpg");
                }
                else
                {
                    qrcode = CombinImage(img, headPhoto);
                    qrcode.Save(path + ".jpg");
                }
            }
            return fileName+".jpg";
        }
        private string GetFileNameByDate()
        {
            string productnumber = "";
            //按年月日生成前12位
            productnumber = DateTime.Now.Year.ToString().Substring(2, 2) + DateTime.Now.Month.ToString().PadLeft(2, ‘0‘) + DateTime.Now.Day.ToString().PadLeft(2, ‘0‘);
            productnumber += DateTime.Now.Hour.ToString().PadLeft(2, ‘0‘);
            // +DateTime.Now.Minute.ToString().PadLeft(2, ‘0‘) + DateTime.Now.Second.ToString().PadLeft(2, ‘0‘);
            //随即数生成4位
            var rnd = new Random((int)DateTime.Now.Ticks);
            productnumber += rnd.Next(0, 9999).ToString().PadLeft(4, ‘0‘);
            return productnumber;
        }
        public static Image CombinImage(Image imgBack, string destImg)
        {
            Image img = Image.FromFile(destImg);        //照片图片
            if (img.Height != 65 || img.Width != 65)
            {
                img = KiResizeImage(img, 65, 65, 0);
            }
            Graphics g = Graphics.FromImage(imgBack);

            g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);      //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);   

            //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框  

            //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);  

            g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);
            GC.Collect();
            return imgBack;
        }
        public static Image KiResizeImage(Image bmp, int newW, int newH, int Mode)
        {
            try
            {
                Image b = new Bitmap(newW, newH);
                Graphics g = Graphics.FromImage(b);
                // 插值算法的质量
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
                g.Dispose();
                return b;
            }
            catch
            {
                return null;
            }
        }

        #endregion
时间: 2024-10-19 12:15:38

二维码生成方法的相关文章

C#生成二维码的方法

本文实例讲述了C#生成二维码的方法.分享给大家供大家参考.具体实现方法如下: 首先引用ThoughtWorks.QRCode.dll 具体代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using ThoughtWorks.QRCode.Codec; namespace QRCodeUtil {

java实现二维码生成的几个方法

1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.net/projects/barcode

二维码生成. 文字生成图片. 多张图片合并方法及临时合成图片并下载

package com.easyrail.eam.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.font.FontRenderContext; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle

二维码生成及读取方法

二维码的制作主要是引用第三方的程序集ThoughtWorks.QRCode.dll,调用QRCodeEncoder的Encode方法得到一个Bitmap图:相反,解析二维码就是用的Decode方法. 如下示例生成二维码的方法: /// <summary> /// 生成不带logo的二维码图片 /// </summary> /// <param name="data">要生成二维码的字符串</param> /// <returns&g

两种PHP生成二维码的方法

PHP生成二维码,个人认为最常用的有两种,1.使用google的api生成,2.使用PHP QR Code生成,两种方法生成的二维码都是很清淅的,效果不错.下面来分别说明这两种方法如何实现. 一.PHP使用google api在线生成二维码: 关于这个API的介绍就不说了吧,你可以去Google的官方网站查询,相信大家关注的是具体代码,如下: <?php $urlToEncode="http://www.baidu.com";//要生成二维码的网址 generateQRfromG

微信支付支付宝支付生成二维码的方法(php生成二维码的三种方法)

如果图简单,可以用在线生成 http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.xinzhenkj.com 最简单最实例的goolge开源方法 1.google开放api 代码如下: [php] view plain copy <span style="font-size:14px;">$urlToEncode="http://www.helloweba.com"; g

【转】Android 二维码 生成和识别(附Demo源码)--不错

原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXin

IOS 二维码生成

这篇博客将会介绍二维码的生成. 由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码. 第一部分 第一部分是二维码的简单生成没有其他重点介绍. 效果图 代码部分 // // ViewController.m // CX 二维码生成 // // Created by ma c on 16/4/12. // Copyright ? 2016年 bjsxt. All rights reserved. // #import "ViewController.h" #import

在云平台上基于Go语言+Google图表API提供二维码生成应用

二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下基于Go语言+Google图表API提供二维码生成功能的小应用,并演示怎样把它公布到云平台上, 让每一个人都能够通过网络訪问使用它. Google图表API Google在http://chart.apis.google.com 上提供了一个将表单数据自己主动转换为图表的服务. 只是,该服务非常难交