/// <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); } }
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)); }
/// <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); }
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); }
protected QRVerToDataSize(int version, QRCodeEncoder.ERROR_CORRECTION errorCorrect, int numeric, int alphaNumeric, int @byte) { Version = version; ErrorCorrect = errorCorrect; Numeric = numeric; AlphaNumeric = alphaNumeric; Byte = @byte; }
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; }
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; }
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); } }
/// <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); }
/// <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)); } }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
public QRCode() { ModuleHeightToWidthRatio = 1; _errorCorrectionLevel = QRCodeEncoder.ERROR_CORRECTION.Q; }
/// <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); }
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)); }
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()); } } }
/// <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); }