引用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         }
生成带Logo的二维码

 

 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         }
图片上生成文字

 

posted on 2017-09-19 10:22  莫循  阅读(662)  评论(4编辑  收藏  举报