C# 二维码生成——QRCode

C#二维码生成,这里使用开源的ThoughtWorks.QRCode.dll库。

步骤:

1.下载ThoughtWorks.QRCode.dll库文件,并引用到项目中。

2.创建QRCodeHandler.cs二维码处理类

/// 二维码处理类

    /// 创建人:杨武

    /// 创建日期:2015-01-22

    /// </summary>

    public class QRCodeHandler

    {

        /// <summary>

        /// 生成二维码

        /// </summary>

        /// <param name="data">数据</param>

        /// <param name="filePath">文件保存路径(绝对路径)</param>

        /// <param name="hasLogo">二维码图标是否添加图片</param>

        /// <param name="logoFilePath">图片的路径(绝对路径)</param>

        /// <returns>true--成功;false--失败</returns>

        public static bool CreateQRcode(string data, string filePath, bool hasLogo = false, string logoFilePath = "")

        {

            bool result = false;

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//二维码编码(Byte、AlphaNumeric、Numeric)

            qrCodeEncoder.QRCodeScale = 4;//二维码尺寸(Version为0时,1:26x26,每加1宽和高各加25

            qrCodeEncoder.QRCodeVersion = 8;//二维码密集度0-40

            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//二维码纠错能力(L:7% M:15% Q:25% H:30%)

            try

            {

                Image card = qrCodeEncoder.Encode(data, Encoding.UTF8);



                using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))

                {

                    card.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);

                    fs.Close();

                }



                if (hasLogo)

                {

                    AddLogo(logoFilePath, card, filePath);

                }



                card.Dispose();

                result = true;

            }

            catch (Exception ex)

            {

                result = false;

            }

            return result;

        }



        /// <summary>

        /// 二维码图标中添加图片

        /// </summary>

        /// <param name="logoFilePath">图片路径</param>

        /// <param name="cord">二维码</param>

        /// <param name="cardSavePath">二维码保存路径</param>

        private static void AddLogo(string logoFilePath, Image cord, string cardSavePath)

        {

            if (string.IsNullOrWhiteSpace(logoFilePath) || cord == null || File.Exists(logoFilePath) == false)

            {

                return;

            }



            using (Image copyImage = Image.FromFile(logoFilePath))

            {

                using (Graphics g = Graphics.FromImage(cord))

                {

                    int x = cord.Width / 2 - copyImage.Width / 2;

                    int y = cord.Height / 2 - copyImage.Height / 2;

                    g.DrawImage(copyImage, new Rectangle(x, y, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);

                }

                cord.Save(cardSavePath);

            }

        }

    }
View Code

3.调用

string str = "http://hao.360.cn/?src=lm&ls=n3335c8fd8f";

            string filtPath = Server.MapPath("~/Images/1.jpg");

            string logoFilePath = Server.MapPath("~/Images/faceIcon.png");

            QRCodeHandler.CreateQRcode(str, filtPath, true, logoFilePath);
View Code

 

你可能感兴趣的:(QRCode)