/// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="qRCodeScale">大小</param>
        /// <param name="qRCodeVersion">版本</param>
        /// <param name="qRCodeErrorCorrect">容错</param>
        /// <param name="logoFile">logo文件</param>
        /// <param name="logoSize">logo大小</param>
        /// <returns></returns>
        public (string error, Bitmap qrcodeBitbmp) CreateQRCode(string content, int qRCodeScale, int qRCodeVersion,
                                                                QRCodeEncoder.ERROR_CORRECTION qRCodeErrorCorrect, string logoFile, int logoSize)
        {
            QRCodeEncoder qrEncoder = new QRCodeEncoder();

            qrEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrEncoder.QRCodeScale      = qRCodeScale;
            if (qRCodeVersion > 0)
            {
                qrEncoder.QRCodeVersion = qRCodeVersion;
            }
            qrEncoder.QRCodeErrorCorrect = qRCodeErrorCorrect;
            try
            {
                Bitmap qrcode = qrEncoder.Encode(content, Encoding.UTF8);
                if (!string.IsNullOrEmpty(logoFile))
                {
                    Graphics g          = Graphics.FromImage(qrcode);
                    Bitmap   bitmapLogo = new Bitmap(logoFile);
                    bitmapLogo = new Bitmap(bitmapLogo, new System.Drawing.Size(logoSize, logoSize));
                    PointF point = new PointF(qrcode.Width / 2 - logoSize / 2, qrcode.Height / 2 - logoSize / 2);
                    g.DrawImage(bitmapLogo, point);
                }
                return(null, qrcode);
            }
            catch (Exception ex)
            {
                return(ex.Message, null);
            }
        }
Ejemplo n.º 2
0
        public static System.Drawing.Image GenerateQRCode(string content, int size)
        {
            QRCodeEncoder.ENCODE_MODE      QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            int border = GetQRCodeBorder(size);
            int QRCodeVersion = 0; int QRCodeScale = 5;

            return(GenerateQRCode(content, QRCodeEncodeMode, QRCodeErrorCorrect, QRCodeVersion, QRCodeScale, size, border));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="Content">内容文本</param>
        /// <param name="QRCodeEncodeMode">二维码编码方式</param>
        /// <param name="QRCodeErrorCorrect">纠错码等级</param>
        /// <param name="QRCodeVersion">二维码版本号 0-40,一般使用8</param>
        /// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>
        /// <param name="size">图片尺寸(像素),0表示不设置</param>
        /// <returns></returns>
        internal static Image CreateQRCode(string Content,
                                           QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode,
                                           QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect,
                                           int QRCodeVersion, int QRCodeScale, int size)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncodeMode;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
            qrCodeEncoder.QRCodeScale        = QRCodeScale;
            qrCodeEncoder.QRCodeVersion      = QRCodeVersion;
            System.Drawing.Image image = qrCodeEncoder.Encode(Content, Encoding.UTF8);
            #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框
            if (size > 0)
            {
                #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸,直至图片尺寸达到接近size的最大值
                while (image.Width < size)
                {
                    qrCodeEncoder.QRCodeScale++;
                    System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content, Encoding.UTF8);
                    if (imageNew.Width < size)
                    {
                        image = new Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                    }
                    else
                    {
                        //新尺寸未采用,恢复最终使用的尺寸
                        qrCodeEncoder.QRCodeScale--;
                        imageNew.Dispose();
                        imageNew = null;
                        break;
                    }
                }
                #endregion

                #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
                {
                    qrCodeEncoder.QRCodeScale--;
                    System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content, Encoding.UTF8);
                    image = new System.Drawing.Bitmap(imageNew);
                    imageNew.Dispose();
                    imageNew = null;
                    if (image.Width < size)
                    {
                        break;
                    }
                }
                #endregion
            }
            #endregion
            return(image);
        }
Ejemplo n.º 4
0
        public static string GenerateQRCode(string companyId, string content, int size, string qrCodeName, string folderName = "QRCode")
        {
            QRCodeEncoder.ENCODE_MODE      QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            int          border = GetQRCodeBorder(size);
            string       imageUrl = string.Empty;
            int          QRCodeVersion = 0; int QRCodeScale = 5;
            WX_ApiConfig config = WXApiConfigServices.QueryWXApiConfig(companyId);

            if (config != null && !string.IsNullOrWhiteSpace(config.SystemLogo))
            {
                imageUrl = config.SystemLogo;
            }
            TxtLogServices.WriteTxtLogEx("GenerateQRCode", imageUrl);
            var bitmap = GenerateQRCode(content, QRCodeEncodeMode, QRCodeErrorCorrect, QRCodeVersion, QRCodeScale, size, border);

            if (bitmap == null)
            {
                return(string.Empty);
            }
            string filePath = string.Format("/Uploads/{2}/{0}.{1}", qrCodeName, "jpg", folderName);

            TxtLogServices.WriteTxtLogEx("GenerateQRCode", "filePath:" + filePath);
            string savePath = GetFileSavePath(string.Format("/Uploads/{0}", folderName), string.Format("{0}.{1}", qrCodeName, "jpg"));

            TxtLogServices.WriteTxtLogEx("GenerateQRCode", "savePath:" + filePath);
            string pathImage = string.Empty;

            if (!string.IsNullOrWhiteSpace(imageUrl))
            {
                pathImage = System.Web.HttpContext.Current.Server.MapPath("~" + imageUrl);
            }
            if (!string.IsNullOrWhiteSpace(pathImage) && File.Exists(pathImage))
            {
                var   logoSize = GetLogoImageSize(size);
                Image bitmap1  = CombinImage(bitmap, pathImage, logoSize);
                if (File.Exists(savePath))
                {
                    File.Delete(savePath);
                }
                bitmap1.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                bitmap1.Dispose();
            }
            else
            {
                if (File.Exists(savePath))
                {
                    File.Delete(savePath);
                }
                bitmap.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                bitmap.Dispose();
            }
            return(filePath);
        }
Ejemplo n.º 5
0
 protected QRVerToDataSize(int version,
                           QRCodeEncoder.ERROR_CORRECTION errorCorrect,
                           int numeric,
                           int alphaNumeric,
                           int @byte)
 {
     Version      = version;
     ErrorCorrect = errorCorrect;
     Numeric      = numeric;
     AlphaNumeric = alphaNumeric;
     Byte         = @byte;
 }
Ejemplo n.º 6
0
 public QRCodeEncoder()
 {
     this.qrcodeErrorCorrect                = QRCodeEncoder.ERROR_CORRECTION.M;
     this.qrcodeEncodeMode                  = QRCodeEncoder.ENCODE_MODE.BYTE;
     this.qrcodeVersion                     = 7;
     this.qrcodeStructureappendN            = 0;
     this.qrcodeStructureappendM            = 0;
     this.qrcodeStructureappendParity       = 0;
     this.qrcodeStructureappendOriginaldata = "";
     this.qrCodeScale           = 4;
     this.qrCodeBackgroundColor = Color.White;
     this.qrCodeForegroundColor = Color.Black;
 }
Ejemplo n.º 7
0
 public QRCodeEncoder()
 {
     this.qrcodeErrorCorrect                = QRCodeEncoder.ERROR_CORRECTION.M;
     this.qrcodeEncodeMode                  = QRCodeEncoder.ENCODE_MODE.BYTE;
     this.qrcodeVersion                     = 0;
     this.qrcodeStructureappendN            = 0;
     this.qrcodeStructureappendM            = 0;
     this.qrcodeStructureappendParity       = 0;
     this.qrcodeStructureappendOriginaldata = "";
     this.qrCodeScale           = 4;
     this.qrCodeBackgroundColor = System.Drawing.Color.White;
     this.qrCodeForegroundColor = System.Drawing.Color.Black;
     this.CharacterSet          = QRCodeEncoder.DEFAULT_ENCODING;
 }
Ejemplo n.º 8
0
        private void btnCreateQRCode_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txbContent.Text))
            {
                this.showlog("请输入数据");
                return;
            }
            int ver      = System.Convert.ToInt32(this.cmbQRCodeVersion.Text);
            int size     = System.Convert.ToInt32(this.txbQRCodeScale.Text);
            int logoSize = System.Convert.ToInt32(this.txbLogoSize.Text);

            (string error, Bitmap qrcodeBitbmp)result;
            if (this.cmbAsm.SelectedIndex == 0)
            {
                var error = ZXing.QrCode.Internal.ErrorCorrectionLevel.L;
                if (this.cmbQRCodeErrorCorrect.SelectedIndex == 1)
                {
                    error = ZXing.QrCode.Internal.ErrorCorrectionLevel.M;
                }
                else if (this.cmbQRCodeErrorCorrect.SelectedIndex == 2)
                {
                    error = ZXing.QrCode.Internal.ErrorCorrectionLevel.Q;
                }
                else if (this.cmbQRCodeErrorCorrect.SelectedIndex == 3)
                {
                    error = ZXing.QrCode.Internal.ErrorCorrectionLevel.H;
                }
                result = this.zxingHelper.CreateQRCode(this.txbContent.Text, size, ver, error, this._logo, logoSize);
            }
            else
            {
                QRCodeEncoder.ERROR_CORRECTION error = (QRCodeEncoder.ERROR_CORRECTION)Enum.Parse(typeof(QRCodeEncoder.ERROR_CORRECTION), this.cmbQRCodeErrorCorrect.Text);
                result = thHelper.CreateQRCode(this.txbContent.Text, size, ver, error, this._logo, logoSize);
            }
            if (string.IsNullOrEmpty(result.error))
            {
                this._bitmap           = result.qrcodeBitbmp;
                this.pictureBox1.Image = result.qrcodeBitbmp;
            }
            else
            {
                this.showlog(result.error);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 创建二维码
        /// </summary>
        /// <param name="content">二维码内容</param>
        /// <param name="size">大小 258、344、430、860、1280</param>
        /// <param name="qrCodeName">二维码名称</param>
        /// <param name="imgPath">本地路径</param>
        /// <param name="type">0-临时 1-长久</param>
        /// <returns>二维码路径</returns>
        public static string GenerateQRCode(string content, int size, string qrCodeName, string imgPath, int type = 0)
        {
            QRCodeEncoder.ENCODE_MODE      QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            int border = GetQRCodeBorder(size);
            int QRCodeVersion = 0; int QRCodeScale = 5;

            var bitmap = GenerateQRCode(content, QRCodeEncodeMode, QRCodeErrorCorrect, QRCodeVersion, QRCodeScale, size, border);

            if (bitmap == null)
            {
                return(string.Empty);
            }
            string fileName = type == 0 ? "Temp" : "Long";
            string filePath = string.Format(@"QRCode\{0}\{1}.{2}", fileName, qrCodeName, "jpg");
            string savePath = GetFileSavePath(string.Format(@"QRCode\{0}", fileName), string.Format("{0}.{1}", qrCodeName, "jpg"), imgPath);

            bitmap.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
            return(filePath);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="domain">域名</param>
        /// <param name="parkingId">车场编号</param>
        /// <param name="plateNo">车牌号</param>
        /// <param name="size">二维码大小 258、344、430、860、1280</param>
        /// <param name="logoPath">二维码中间小图路径</param>
        /// <returns>二维码字节</returns>
        public static byte[] GenerateByteQRCode(string domain, string parkingId, string plateNo, int size, string logoPath)
        {
            //if (!string.IsNullOrWhiteSpace(plateNo)) {
            //    plateNo = HttpUtility.UrlEncode(plateNo, Encoding.UTF8);
            //}
            string content = string.Format("{0}/qrl/qrp_ix_pid={1}^pn={2}", domain.TrimEnd('/'), parkingId, plateNo);

            QRCodeEncoder.ENCODE_MODE      QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            int border = GetQRCodeBorder(size);

            int QRCodeVersion = 0; int QRCodeScale = 5;


            var bitmap = GenerateQRCode(content, QRCodeEncodeMode, QRCodeErrorCorrect, QRCodeVersion, QRCodeScale, size, border);

            if (bitmap == null)
            {
                return(null);
            }
            string pathImage = string.Empty;

            if (!string.IsNullOrWhiteSpace(logoPath))
            {
                pathImage = System.Web.HttpContext.Current.Server.MapPath("~" + logoPath);
            }
            if (!string.IsNullOrWhiteSpace(pathImage) && File.Exists(pathImage))
            {
                var   logoSize = GetLogoImageSize(size);
                Image bitmap1  = CombinImage(bitmap, pathImage, logoSize);
                return(GetByteImage(bitmap1));
            }
            else
            {
                return(GetByteImage(bitmap));
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 自定义二维码(默认参数使用的是默认二维码的值)
        /// </summary>
        /// <param name="content">二维码内容</param>
        /// <param name="QRCodeForegroundColor">设置前景色eg:1. Color.FromArgb(51, 255, 0) 2. Color.Red</param>
        /// <param name="QRCodeBackgroundColor">设置背景色eg:1. Color.FromArgb(51, 255, 0) 2. Color.Red</param>
        /// <param name="QRCodeEncodeMode">设置编码模式 三种模式:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
        /// <param name="QRCodeScale">设置编码测量度(比例) 最大40 对应int类型值为4</param>
        /// <param name="QRCodeVersion">设置编码版本 此值具体如何设置暂不清楚 请参照ThoughtWorks.QRCode开源项目</param>
        /// <param name="QRCodeErrorCorrect">设置编码错误纠正 容错级别大小:L M Q H</param>
        /// <returns>return Image</returns>
        public static Image QRCodeByLXing(string content, Color QRCodeForegroundColor, Color QRCodeBackgroundColor,
                                          QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
                                          int QRCodeScale = 4, int QRCodeVersion = 8,
                                          QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H)
        {
            QRCodeEncoder qrc = new QRCodeEncoder();

            //设置编码模式 三种模式:BYTE ,ALPHA_NUMERIC,NUMERIC
            qrc.QRCodeEncodeMode = QRCodeEncodeMode;
            //设置编码测量度(比例) 最大40
            qrc.QRCodeScale = QRCodeScale;
            //设置编码版本
            qrc.QRCodeVersion = QRCodeVersion;
            //设置编码错误纠正 容错级别大小:L M Q H
            qrc.QRCodeErrorCorrect = QRCodeErrorCorrect;

            //设置前景色
            qrc.QRCodeForegroundColor = QRCodeForegroundColor;
            //设置背景色
            qrc.QRCodeBackgroundColor = QRCodeBackgroundColor;

            //二维码
            return(qrc.Encode(content));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Generate the QR Hatch
        /// </summary>
        /// <param name="textToEncode">Text to encode</param>
        /// <param name="encode">Encode mode</param>
        /// <param name="version">Version of the encoding</param>
        /// <param name="errorCorrect">Error correct mode</param>
        /// <param name="scale">Scale</param>
        private static Hatch GenerateQRHatch(
            string textToEncode,
            QRCodeEncoder.ENCODE_MODE encode,
            int version,
            QRCodeEncoder.ERROR_CORRECTION errorCorrect,
            double size
            )
        {
            // Create the HATCH with the QR Code

            AcadHatchQREncoder qre = new AcadHatchQREncoder();

            qre.QRCodeEncodeMode   = encode;
            qre.QRCodeVersion      = version;
            qre.QRCodeErrorCorrect = errorCorrect;
            qre.QRCodeScale        = 1;//scale;

            Hatch qrHatch             = null;
            bool  autoIncreaseVersion = false;

            while (qrHatch == null)
            {
                try
                {
                    qrHatch = qre.HatchEncode(textToEncode);
                }
                catch
                {
                    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
                    if (autoIncreaseVersion)
                    {
                        //security check: this code cannot generate qr code
                        //with version higher than 40 (limitation)
                        //at version 40 qith medium correction level, the
                        //size for alpha numeric is 3391 chars
                        //http://www.denso-wave.com/qrcode/vertable1-e.html

                        if (qre.QRCodeVersion > 40)
                        {
                            ed.WriteMessage("Impossible generate a " +
                                            "QR code hatch at this version. Please " +
                                            "review and reduce your data and try again");
                            return(null);
                        }

                        // keep increasing....

                        qre.QRCodeVersion++;
                        continue;
                    }
                    PromptKeywordOptions pko = new PromptKeywordOptions(
                        string.Format("\nImpossible create hatch with version {0}. " +
                                      "Would you like to increase?\nImportant: higher version " +
                                      "number generate more dense QR codes, which can affect " +
                                      "the reading/decoding process.", qre.QRCodeVersion));
                    pko.Keywords.Add("No");
                    pko.Keywords.Add("Yes");
                    PromptResult pkr = ed.GetKeywords(pko);
                    if (pkr.Status != PromptStatus.OK)
                    {
                        return(null);
                    }
                    if (pkr.StringResult.Equals("No"))
                    {
                        return(null);
                    }
                    qre.QRCodeVersion++;
                    autoIncreaseVersion = true;
                }
            }

            // Configure and evaluate the hatch

            qrHatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
            qrHatch.EvaluateHatch(true);

            //get the min and max point of the hatch

            Point3d minPt = qrHatch.GeometricExtents.MinPoint;
            Point3d maxPt = qrHatch.GeometricExtents.MaxPoint;

            //the center point used for scaling, and the scale factor

            Point3d centerPoint = minPt;
            double  currentSize = maxPt.X - minPt.X;
            double  scaleFactor = (double)size / currentSize;

            //now resize the hatch

            qrHatch.TransformBy(Matrix3d.Scaling(scaleFactor, centerPoint));

            return(qrHatch);
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="Content">内容文本</param>
        /// <param name="QRCodeEncodeMode">二维码编码方式</param>
        /// <param name="QRCodeErrorCorrect">纠错码等级</param>
        /// <param name="QRCodeVersion">二维码版本号 0-40</param>
        /// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>
        /// <param name="size">图片尺寸(像素),0表示不设置</param>
        /// <param name="border">图片白边(像素),当size大于0时有效</param>
        /// <returns></returns>
        public static System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border, System.Drawing.Color codeEyeColor)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncodeMode;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
            qrCodeEncoder.QRCodeScale        = QRCodeScale;
            qrCodeEncoder.QRCodeVersion      = QRCodeVersion;
            var   encodedData = qrCodeEncoder.Encode(Content);// QRcode.CreateQRCode(content, QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION.M, 8, size, size, 0, codeEyeColor);
            var   qrImage     = new QrImage();
            Image image       = qrImage.CreateImage(encodedData);

            //System.Drawing.Image image = qrCodeEncoder.Encode(Content);

            #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框
            if (size > 0)
            {
                //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                while (image.Width < size)
                {
                    qrCodeEncoder.QRCodeScale++;
                    Image imageNew = qrImage.CreateImage(encodedData);
                    //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                    if (imageNew.Width < size)
                    {
                        image = new System.Drawing.Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                    }
                    else
                    {
                        qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸
                        imageNew.Dispose();
                        imageNew = null;
                        break;
                    }
                }
                #endregion

                //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
                {
                    qrCodeEncoder.QRCodeScale--;
                    Image imageNew = qrImage.CreateImage(encodedData);
                    //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                    image = new System.Drawing.Bitmap(imageNew);
                    imageNew.Dispose();
                    imageNew = null;
                    if (image.Width < size)
                    {
                        break;
                    }
                }
                #endregion

                //根据参数设置二维码图片白边的最小宽度(按需缩小)
                #region 根据参数设置二维码图片白边的最小宽度
                if (image.Width <= size && border > 0)
                {
                    while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1)
                    {
                        qrCodeEncoder.QRCodeScale--;
                        Image imageNew = qrImage.CreateImage(encodedData);
                        //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                        image = new System.Drawing.Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                    }
                }
                #endregion

                //已经确认二维码图像,为图像染色修饰
                if (true)
                {
                    //定位点方块边长
                    int beSize = qrCodeEncoder.QRCodeScale * 3;

                    int bep1_l = qrCodeEncoder.QRCodeScale * 2;
                    int bep1_t = qrCodeEncoder.QRCodeScale * 2;

                    int bep2_l = image.Width - qrCodeEncoder.QRCodeScale * 5 - 1;
                    int bep2_t = qrCodeEncoder.QRCodeScale * 2;

                    int bep3_l = qrCodeEncoder.QRCodeScale * 2;
                    int bep3_t = image.Height - qrCodeEncoder.QRCodeScale * 5 - 1;

                    int bep4_l = image.Width - qrCodeEncoder.QRCodeScale * 7 - 1;
                    int bep4_t = image.Height - qrCodeEncoder.QRCodeScale * 7 - 1;

                    System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(image);

                    // Create solid brush.
                    SolidBrush blueBrush = new SolidBrush(codeEyeColor == null ? System.Drawing.Color.Black : codeEyeColor);

                    // Fill rectangle to screen.
                    graphic0.FillRectangle(blueBrush, bep1_l, bep1_t, beSize, beSize);
                    graphic0.FillRectangle(blueBrush, bep2_l, bep2_t, beSize, beSize);
                    graphic0.FillRectangle(blueBrush, bep3_l, bep3_t, beSize, beSize);
                    graphic0.FillRectangle(blueBrush, bep4_l, bep4_t, qrCodeEncoder.QRCodeScale, qrCodeEncoder.QRCodeScale);
                }

                //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置
                #region 如果目标尺寸大于生成的图片尺寸,将二维码绘制在目标尺寸白色画布的中心位置
                if (image.Width < size)
                {
                    //新建空白绘图
                    System.Drawing.Bitmap   panel    = new System.Drawing.Bitmap(size, size);
                    System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);
                    int p_left = 0;
                    int p_top  = 0;
                    if (image.Width <= size) //如果原图比目标形状宽
                    {
                        p_left = (size - image.Width) / 2;
                    }
                    if (image.Height <= size)
                    {
                        p_top = (size - image.Height) / 2;
                    }

                    //将生成的二维码图像粘贴至绘图的中心位置
                    graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height);
                    image = new System.Drawing.Bitmap(panel);
                    panel.Dispose();
                    panel = null;
                    graphic0.Dispose();
                    graphic0 = null;
                }
                #endregion
            }
            #endregion
            return(image);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="Content">内容文本</param>
        /// <param name="QRCodeEncodeMode">二维码编码方式</param>
        /// <param name="QRCodeErrorCorrect">纠错码等级</param>
        /// <param name="QRCodeVersion">二维码版本号 0-40</param>
        /// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>
        /// <param name="size">图片尺寸(像素),0表示不设置</param>
        /// <param name="border">图片白边(像素),当size大于0时有效</param>
        /// <returns></returns>
        public static System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncodeMode;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
            qrCodeEncoder.QRCodeScale        = QRCodeScale;
            qrCodeEncoder.QRCodeVersion      = QRCodeVersion;

            var   encodedData = qrCodeEncoder.Encode(Content);// QRcode.CreateQRCode(content, QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION.M, 8, size, size, 0, codeEyeColor);
            var   qrImage     = new QrImage();
            Image image       = qrImage.CreateImage(encodedData);

            //System.Drawing.Image image = qrCodeEncoder.Encode(Content);

            #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框
            if (size > 0)
            {
                //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                while (image.Width < size)
                {
                    qrCodeEncoder.QRCodeScale++;

                    Image imageNew = qrImage.CreateImage(encodedData);
                    //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                    if (imageNew.Width < size)
                    {
                        image = new System.Drawing.Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                    }
                    else
                    {
                        qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸
                        imageNew.Dispose();
                        imageNew = null;
                        break;
                    }
                }
                #endregion

                //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
                {
                    qrCodeEncoder.QRCodeScale--;
                    //var encodedData = qrCodeEncoder.Encode(Content);// QRcode.CreateQRCode(content, QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION.M, 8, size, size, 0, codeEyeColor);
                    //var qrImage = new QrImage();
                    Image imageNew = qrImage.CreateImage(encodedData);

                    //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                    image = new System.Drawing.Bitmap(imageNew);
                    imageNew.Dispose();
                    imageNew = null;
                    if (image.Width < size)
                    {
                        break;
                    }
                }
                #endregion

                //如果目标尺寸大于生成的图片尺寸,则为图片增加白边
                #region 如果目标尺寸大于生成的图片尺寸,则为图片增加白边
                if (image.Width <= size)
                {
                    //根据参数设置二维码图片白边的最小宽度
                    #region 根据参数设置二维码图片白边的最小宽度
                    if (border > 0)
                    {
                        while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1)
                        {
                            qrCodeEncoder.QRCodeScale--;
                            Image imageNew = qrImage.CreateImage(encodedData);
                            //System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
                            image = new System.Drawing.Bitmap(imageNew);
                            imageNew.Dispose();
                            imageNew = null;
                        }
                    }
                    #endregion

                    //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置
                    if (image.Width < size)
                    {
                        //新建空白绘图
                        System.Drawing.Bitmap   panel    = new System.Drawing.Bitmap(size, size);
                        System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);
                        int p_left = 0;
                        int p_top  = 0;
                        if (image.Width <= size) //如果原图比目标形状宽
                        {
                            p_left = (size - image.Width) / 2;
                        }
                        if (image.Height <= size)
                        {
                            p_top = (size - image.Height) / 2;
                        }

                        //将生成的二维码图像粘贴至绘图的中心位置
                        graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height);
                        image = new System.Drawing.Bitmap(panel);
                        panel.Dispose();
                        panel = null;
                        graphic0.Dispose();
                        graphic0 = null;
                    }
                }
                #endregion
            }
            #endregion
            return(image);
        }
Ejemplo n.º 15
0
        public Image CreateQRCodeLogo(string data, string logoPath, QRCodeEncoder.ENCODE_MODE encodeing = QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION correction = QRCodeEncoder.ERROR_CORRECTION.M, int version = 7, int scale = 4)
        {
            Image img = CreateQRCode(data, encodeing, correction, scale, version);

            if (!File.Exists(logoPath))
            {
                return(img);
            }
            Image waterimg = Image.FromFile(logoPath);
            //添加水印
            Graphics g = Graphics.FromImage(img);
            //获取水印位置设置
            ArrayList loca = new ArrayList();
            int       x    = 0;
            int       y    = 0;

            x = img.Width / 2 - waterimg.Width / 2;
            y = img.Height / 2 - waterimg.Height / 2;
            loca.Add(x);
            loca.Add(y);

            g.DrawImage(waterimg, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), waterimg.Width, waterimg.Height));
            //释放资源
            waterimg.Dispose();
            g.Dispose();

            //string newpath = "D:\\ss.png";
            //img.Save(newpath);
            //img.Dispose();

            return(img);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="data">文本内容</param>
        /// <param name="encodeing">文本类型</param>
        /// <param name="correction">水平位置</param>
        /// <param name="scale">比例</param>
        /// <param name="version">version</param>
        /// <returns></returns>
        public static Image CreateQRCode(string data, QRCodeEncoder.ENCODE_MODE encodeing = QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION correction = QRCodeEncoder.ERROR_CORRECTION.M, int version = 7, int scale = 4)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder
            {
                QRCodeEncodeMode   = encodeing,
                QRCodeErrorCorrect = correction,
                QRCodeScale        = scale,
                QRCodeVersion      = version
            };
            Image image = qrCodeEncoder.Encode(data);

            return(image);
        }
        /// <summary>
        /// 生成【带图片】二维码
        /// </summary>
        /// <param name="data">二维码数据</param>
        /// <param name="scale">尺寸</param>
        /// <param name="version">版本</param>
        /// <param name="encoding">加密方式</param>
        /// <param name="correctionLevel">容错级别</param>
        /// <param name="logoImgPath">嵌入的图片路径</param>
        /// <param name="savePath">二维码图片保存路径</param>
        /// /// <param name="savePath">是否要删除</param>
        /// <returns>二维码图片</returns>
        public static Image GetQRCode(string data, int scale, int version, QRCodeEncoder.ENCODE_MODE encoding, QRCodeEncoder.ERROR_CORRECTION correctionLevel, string logoImgPath = "", string savePath = "", bool existDel = true)
        {
            //校验
            if (string.IsNullOrWhiteSpace(data))
            {
                throw new MessageException("数据不能为空!");
            }

            //参数初始化
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeScale        = scale;
            qrCodeEncoder.QRCodeVersion      = version;
            qrCodeEncoder.QRCodeEncodeMode   = encoding;
            qrCodeEncoder.QRCodeErrorCorrect = correctionLevel;

            //返回二维码图片
            Image image;

            try
            {
                //Encoding.UTF8
                var tempImage = qrCodeEncoder.Encode(data, Encoding.Default);
                int width     = 0; //tempImage.Width / 10;
                int dwidth    = 0; //width * 2;
                image = new Bitmap(tempImage.Width + dwidth, tempImage.Height + dwidth);
                Graphics g = Graphics.FromImage(image);
                var      c = System.Drawing.Color.White;
                g.FillRectangle(new SolidBrush(c), 0, 0, tempImage.Width + dwidth, tempImage.Height + dwidth);
                g.DrawImage(tempImage, width, width);
                g.Dispose();

                //二维码中嵌入图片
                if (!string.IsNullOrWhiteSpace(logoImgPath))
                {
                    var logoImg = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, logoImgPath.Replace(AppDomain.CurrentDomain.BaseDirectory, string.Empty));
                    if (!File.Exists(logoImg))
                    {
                        throw new MessageException("嵌入二位码中的图片文件不存在!");
                    }

                    //合并图片
                    image = CombinImage(image, logoImg);
                }

                //保存二维码
                if (!string.IsNullOrWhiteSpace(savePath))
                {
                    var qrCodeImgPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, savePath.Replace(AppDomain.CurrentDomain.BaseDirectory, string.Empty));
                    if (existDel)
                    {
                        if (File.Exists(qrCodeImgPath))
                        {
                            File.Delete(qrCodeImgPath);
                        }
                        image.Save(qrCodeImgPath, ImageFormat.Png);
                    }
                    else
                    {
                        if (!File.Exists(qrCodeImgPath))
                        {
                            image.Save(qrCodeImgPath, ImageFormat.Png);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new MessageException(ex.Message);
            }

            return(image);
        }
Ejemplo n.º 18
0
 public QRCode()
 {
     ModuleHeightToWidthRatio = 1;
     _errorCorrectionLevel    = QRCodeEncoder.ERROR_CORRECTION.Q;
 }
Ejemplo n.º 19
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 /// <param name="filename"></param>
 /// <param name="backgroundColor"></param>
 /// <param name="foregroundColor"></param>
 /// <param name="scale"></param>
 /// <param name="version"></param>
 /// <param name="mode"></param>
 /// <param name="errorcorrection"></param>
 /// <param name="imageFormat"></param>
 /// <param name="logo"></param>
 /// <returns></returns>
 public bool CreateThoughWorksQRCodeWithLogo(string context, string filename, Color backgroundColor, Color foregroundColor, int scale, int version, QRCodeEncoder.ENCODE_MODE mode, QRCodeEncoder.ERROR_CORRECTION errorcorrection, ImageFormat imageFormat, Image logo)
 {
     try
     {
         QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
         qrCodeEncoder.QRCodeBackgroundColor = backgroundColor;
         qrCodeEncoder.QRCodeForegroundColor = foregroundColor;
         qrCodeEncoder.QRCodeScale           = scale;
         qrCodeEncoder.QRCodeVersion         = version;
         qrCodeEncoder.QRCodeEncodeMode      = mode;
         qrCodeEncoder.QRCodeErrorCorrect    = errorcorrection;
         Image    image    = qrCodeEncoder.Encode(context, Encoding.UTF8);
         Graphics graphics = Graphics.FromImage(image);
         graphics.DrawImage(logo, (image.Width - 120) / 2, (image.Height - 120) / 2, 120, 120);
         FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
         image.Save(fs, imageFormat);
         graphics.Dispose();
     }
     catch (Exception ex)
     {
         log.Error("CreateThoughWorksQRCodeWithLogo()发生错误,错误信息如下:{0}", ex);
     }
     return(true);
 }
Ejemplo n.º 20
0
 public static Image getQRCode(string content, Encoding encoding, string encode_mode, int code_scale, int code_version, string error_correction, Color background_color, Color fore_color, Image logo, int logo_width, int logo_height)
 {
     QRCodeEncoder.ENCODE_MODE Mode = QRCodeConfig.getEncodeMode(encode_mode);
     QRCodeEncoder.ERROR_CORRECTION Correction = QRCodeConfig.getErrorCorrection(error_correction);
     return getQRCode(content, encoding, Mode, code_scale, code_version, Correction, background_color, fore_color, logo, logo_width, logo_height);
 }
        public static Bitmap CreateQRCode(this String content, QRCodeEncoder.ENCODE_MODE encoding, int scale, int version, QRCodeEncoder.ERROR_CORRECTION errorCorrect)
        {
            if (String.IsNullOrEmpty(content))
            {
                return(null);
            }

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeScale        = scale;
            qrCodeEncoder.QRCodeVersion      = version;
            qrCodeEncoder.QRCodeErrorCorrect = errorCorrect;
            qrCodeEncoder.CharacterSet       = "UTF-8";

            return(qrCodeEncoder.Encode(content));
        }
Ejemplo n.º 22
0
 public static Image getQRCode(string content, Encoding encoding, QRCodeEncoder.ENCODE_MODE encode_mode, int code_scale, int code_version, QRCodeEncoder.ERROR_CORRECTION correction, Color background_color, Color fore_color, Image logo, int logo_width, int logo_height)
 {
     if (content.isNull())
         content = "(Null)";
     if (fore_color.A == 0)
         fore_color = Color.Black;
     if (background_color.A == 0)
         background_color = Color.White;
     QRCodeEncoder encoder = new QRCodeEncoder();
     encoder.QRCodeEncodeMode = encode_mode;
     encoder.QRCodeScale = code_scale;
     encoder.QRCodeVersion = code_version;
     encoder.QRCodeErrorCorrect = correction;
     encoder.QRCodeBackgroundColor = background_color;
     encoder.QRCodeForegroundColor = fore_color;
     Bitmap code = null;
     if (encoding == null)
         code = encoder.Encode(content);
     else
         code = encoder.Encode(content, encoding);
     if (logo != null)
     {
         try
         {
             Bitmap logo_s = new Bitmap(logo, logo_width, logo_height);
             Point point = new Point((code.Width - logo_width) / 2, (code.Height - logo_height) / 2);
             Graphics g = Graphics.FromImage(code);
             g.DrawImage(logo_s, point);
         }
         catch { }
     }
     return code;
 }
 public static String CreateQRCodeImageSrc(this String content, QRCodeEncoder.ENCODE_MODE encoding = QRCodeEncoder.ENCODE_MODE.BYTE, int scale = 4, int version = 8, QRCodeEncoder.ERROR_CORRECTION errorCorrect = QRCodeEncoder.ERROR_CORRECTION.L, float dpi = 600f)
 {
     using (Bitmap img = content.CreateQRCode(encoding, scale, version, errorCorrect))
     {
         using (MemoryStream buffer = new MemoryStream())
         {
             img.SetResolution(dpi, dpi);
             img.Save(buffer, ImageFormat.Png);
             StringBuilder sb = new StringBuilder("data:image/png;base64,");
             sb.Append(Convert.ToBase64String(buffer.ToArray()));
             return(sb.ToString());
         }
     }
 }
Ejemplo n.º 24
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="Content">内容文本</param>
        /// <param name="QRCodeEncodeMode">二维码编码方式</param>
        /// <param name="QRCodeErrorCorrect">纠错码等级</param>
        /// <param name="QRCodeVersion">二维码版本号 0-40</param>
        /// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>
        /// <param name="size">图片尺寸(像素),0表示不设置</param>
        /// <param name="border">图片白边(像素),当size大于0时有效</param>
        /// <returns></returns>
        public static System.Drawing.Image GenerateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncodeMode;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
            qrCodeEncoder.QRCodeScale        = QRCodeScale;
            qrCodeEncoder.QRCodeVersion      = QRCodeVersion;
            TxtLogServices.WriteTxtLogEx("GenerateQRCode", "Content:" + Content);
            System.Drawing.Image image = qrCodeEncoder.Encode(Content, Encoding.UTF8);
            #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框
            if (size > 0)
            {
                //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                while (image.Width < size)
                {
                    qrCodeEncoder.QRCodeScale++;
                    System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content, Encoding.UTF8);
                    if (imageNew.Width < size)
                    {
                        image = new System.Drawing.Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                    }
                    else
                    {
                        qrCodeEncoder.QRCodeScale--;  //新尺寸未采用,恢复最终使用的尺寸
                        imageNew.Dispose();

                        imageNew = null;
                        break;
                    }
                }
                #endregion
                //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
                {
                    qrCodeEncoder.QRCodeScale--;
                    System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content, Encoding.UTF8);
                    image = new System.Drawing.Bitmap(imageNew);
                    imageNew.Dispose();
                    imageNew = null;
                    if (image.Width < size)
                    {
                        break;
                    }
                }
                #endregion

                //如果目标尺寸大于生成的图片尺寸,则为图片增加白边
                #region 如果目标尺寸大于生成的图片尺寸,则为图片增加白边
                if (image.Width <= size)
                {
                    //根据参数设置二维码图片白边的最小宽度
                    #region 根据参数设置二维码图片白边的最小宽度
                    if (border > 0)
                    {
                        while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1)
                        {
                            qrCodeEncoder.QRCodeScale--;
                            System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content, Encoding.UTF8);
                            image = new System.Drawing.Bitmap(imageNew);
                            imageNew.Dispose();
                            imageNew = null;
                        }
                    }
                    #endregion

                    //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置
                    if (image.Width < size)
                    {
                        //新建空白绘图
                        System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size);

                        System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);
                        graphic0.Clear(Color.White);
                        int p_left = 0;
                        int p_top  = 0;
                        if (image.Width <= size)
                        {
                                                 //如果原图比目标形状宽
                            {
                                p_left = (size - image.Width) / 2;
                            }
                        }
                        if (image.Height <= size)
                        {
                            p_top = (size - image.Height) / 2;
                        }
                        //将生成的二维码图像粘贴至绘图的中心位置
                        graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height);
                        image = new System.Drawing.Bitmap(panel);
                        panel.Dispose();
                        panel = null;
                        graphic0.Dispose();
                        graphic0 = null;
                    }
                }
                #endregion
            }
            #endregion
            return(image);
        }