

一顿查阅资料,得到解决
先看看我最终的代码
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 相对流结束位置
川公网安备 51010702003150号
留下您的脚步
最近评论