引用ZXing类库
实现功能:
1生成带有Logo二维码
2 将二维码绘制到图片上
3 图片上绘制文字
1 /// <summary> 2 /// 生成带Logo的二维码 3 /// </summary> 4 /// <param name="text"></param> 5 public void Generate3(string text, string logoPath, string yqPath) 6 { 7 //Logo 图片 8 Bitmap logo = new Bitmap(logoPath); 9 //构造二维码写码器 10 MultiFormatWriter writer = new MultiFormatWriter(); 11 Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>(); 12 hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); 13 hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); 14 hint.Add(EncodeHintType.MARGIN, 0); 15 16 //生成二维码 17 BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, 150, 150, hint); 18 BarcodeWriter barcodeWriter = new BarcodeWriter(); 19 Bitmap map = barcodeWriter.Write(bm); 20 21 //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸) 22 int[] rectangle = bm.getEnclosingRectangle(); 23 24 //计算插入图片的大小和位置 25 int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width); 26 int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height); 27 int middleL = (map.Width - middleW) / 2; 28 int middleT = (map.Height - middleH) / 2; 29 30 //将img转换成bmp格式,否则后面无法创建Graphics对象 31 Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb); 32 using (Graphics g = Graphics.FromImage(bmpimg)) 33 { 34 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 35 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 36 g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 37 g.DrawImage(map, 0, 0); 38 } 39 //将二维码插入图片 40 Graphics myGraphic = Graphics.FromImage(bmpimg); 41 //白底 42 myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH); 43 myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH); 44 45 //保存成图片 46 bmpimg.Save(yqPath, ImageFormat.Jpeg); 47 }
1 public string CreateQrCode(string md5Str,string name,int sex) 2 { 3 string str = sex == 1? "先生":"女士"; 4 string logoPath = AppDomain.CurrentDomain.BaseDirectory + "/logo.png"; 5 string qrCodePath = path + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"; 6 string yqPath = AppDomain.CurrentDomain.BaseDirectory + "/yq2.jpg"; 7 string yqCardPath = path + TCommon.Md5(DateTime.Now.ToString("yyyyMMddHHmmss")) + ".jpg"; 8 if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 9 { 10 Directory.CreateDirectory(path); 11 } 12 Generate3(md5Str,logoPath,qrCodePath); 13 Image qrCodeImg = new Bitmap(qrCodePath); 14 Image image = new Bitmap(yqPath); 15 Graphics ig = Graphics.FromImage(image); 16 Font font = new Font("Arial", 38,FontStyle.Bold); 17 Font font2 = new Font("STXINWEI", 38, FontStyle.Bold); 18 Brush brush = System.Drawing.Brushes.Black; 19 SizeF size = ig.MeasureString(name, font2); 20 SizeF size2 = ig.MeasureString(str, font); 21 ig.DrawString(name, font, brush, (720-size.Width-size2.Width) /2, 680); 22 ig.DrawString(str, font, brush, (720 - size.Width - size2.Width) / 2 + size.Width, 680); 23 ig.FillRectangle(Brushes.White, 280, 351, 160, 160); 24 ig.DrawImage(qrCodeImg, 285, 356); 25 image.Save(yqCardPath); 26 return yqCardPath.Substring(2); 27 }