.NetCore——QRCoder生成二维码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
static void Main(string[] args) { //创建一个新的QRCodeGenerator实例 QRCodeGenerator qrGenerator = new QRCodeGenerator(); //创建一个二维码 “123123”为显示内容 QRCodeData qrCodeData = qrGenerator.CreateQrCode("123123", QRCodeGenerator.ECCLevel.M, true); //放入生成的二维码 QRCode qrCode = new QRCode(qrCodeData); //获取到二维码图形 Bitmap qrCodeImage = qrCode.GetGraphic(15, Color.Black, Color.White, false); /* GetGraphic方法参数说明 * public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true) * int pixelsPerModule:生成二维码图片的像素大小 ,我这里设置的是5 * Color darkColor:暗色 一般设置为Color.Black 黑色 * Color lightColor:亮色 一般设置为Color.White 白色 * Bitmap icon :二维码 水印图标 例如:Bitmap icon = new Bitmap(路径); 默认为NULL ,加上这个二维码中间会显示一个图标 * int iconSizePercent: 水印图标的大小比例 ,可根据自己的喜好设置 * int iconBorderWidth: 水印图标的边框 * bool drawQuietZones:静止区,位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true */ //新图形(给出自定义大小,可以解决二维码生成时因为内容而影响图片大小的问题) /* * 550为宽高 * +60为上下左右各留出30的空白区域 * 35*2为我要给图片底下添加字体 最多两行 35是行高 提前调试得知 */ Bitmap newBM = new Bitmap(550 + 60, 550 + (35 * 2) + 60); //新画布 Graphics newGP = Graphics.FromImage(newBM); //清除所有背景色并指定背景颜色 newGP.Clear(Color.White); // 插值算法的质量 newGP.InterpolationMode = InterpolationMode.HighQualityBicubic; //将旧图画入新图中 /* * qrCodeImage:旧图 * new Rectangle(30, 30, 550, 550):在画布上操作的定位及宽高(前两个参数为距左边,距顶部,后边为宽高) 此处宽高为自定义 * new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height):要操作图片的定位及宽高 * GraphicsUnit.Pixel:使用像素为单位 */ newGP.DrawImage(qrCodeImage, new Rectangle(30, 30, 550, 550), new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height), GraphicsUnit.Pixel); //设置字体 Font font = new Font("楷体", 30f, FontStyle.Bold, GraphicsUnit.Pixel); 文字居中(不会换行) 文字长度 //int strWidth = (int)g2.MeasureString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1).Width; 总长度减去文字长度的一半 (居中显示) //int wordStartX = (qrCodeImage.Width - strWidth) / 2; //int wordStartY = qrCodeImage.Height - 30; //g2.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1, Brushes.Black, wordStartX, wordStartY); //以下为文字居中处理(可以换行) RectangleF rec = new RectangleF((float)(newBM.Width * 0.10), newBM.Height - ((35 * 2) + 15), (float)(newBM.Width * 0.80), font.Height * 2); Brush fontBrush = SystemBrushes.ControlText; //此处为设置居中方式可以让换行后的文字也居中 StringFormat sformat = new StringFormat(); sformat.Alignment = StringAlignment.Center; sformat.LineAlignment = StringAlignment.Center; newGP.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font, fontBrush, rec, sformat); //资源释放 newGP.Dispose(); newBM.Save(Path.Combine(AppContext.BaseDirectory, $"{Guid.NewGuid()}.jpg")); } |
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。