一顿查阅资料,得到解决
先看看我最终的代码
MessageInfo msg = new MessageInfo(); string content = "https://www.yangshaofeng.com";//二维码生成所需的内容文字 //开始生成二维码 var encoder = new QrEncoder(ErrorCorrectionLevel.M); QrCode qrCode = encoder.Encode(content); GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(14, QuietZoneModules.Two), Brushes.Black, Brushes.White); DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width); //将二维码信息画在GDI+位图上面 Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth); Graphics g = Graphics.FromImage(map); render.Draw(g, qrCode.Matrix); //将GDI+位图转换为流数据 MemoryStream ms = new MemoryStream(); map.Save(ms, ImageFormat.Png); //获取背景图片 var wwwroot_path = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Uploads", "QrCode"); var bg_path = System.IO.Path.Combine(wwwroot_path, "bg.png"); Image qrcodebgimg = Image.FromFile(bg_path); //获取二维码的图片 Image qrcodeimg = Image.FromStream(ms); //将背景转换为GID+位图 准备操作 Bitmap qrcodebgmap = new Bitmap(qrcodebgimg); //位图转换为画板 Graphics qrcodebgg = Graphics.FromImage(qrcodebgmap); //开始画二维码和头像 //初始化一个位置 qrcodebgg.DrawImage(qrcodeimg, 165, 770, 280, 280); //写字 //画刷颜色 SolidBrush txtBrush = new SolidBrush(Color.White); //格式居中 StringFormat txtFromat = new StringFormat(); txtFromat.Alignment = StringAlignment.Center; //开始画 文字 字体 画笔 位置中间 qrcodebgg.DrawString("推荐码", new Font("黑体", 25), txtBrush, new Point(qrcodebgmap.Width / 2, 710), txtFromat); //可转换为流数据进行操作 MemoryStream qrcodebgms = new MemoryStream(); qrcodebgmap.Save(qrcodebgms, ImageFormat.Png); qrcodebgms.Seek(0, SeekOrigin.Begin); // 此处需要将流重置,不然下面的代码读取不到数据。 string filename = $"123456789.png"; msg = UploadImageOssByStream(qrcodebgms, filename);
关键就是这一句
qrcodebgms.Seek(0, SeekOrigin.Begin);
Seek 方法表示移动流的读取指针
第一个参数0 表示指针位置
第二个zhi参数 SeekOrigin.Begin 表示所提供的指针位置相对流的开始,一般还可以使用 SeekOrigin.Current 相对当前位置,SeekOrigin.End 相对流结束位置
留下您的脚步
最近评论