c#.用QRCoder包快速生成二维码并向图片写入文字调整位置

.NetCore——QRCoder生成二维码

一、开始
本文使用QRCoder实现生成二维码,并且在空白区域放入自定义文字。
引入QRCoder
在这里插入图片描述
具体实现如下
代码中一些参数等问题,均通过注释体现

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"));
        }

下图为实现效果
在这里插入图片描述
可以从结果中看出 符合我们代码的逻辑。空白区域,间距,文字,文字换行,文字居中。

在Linux中需要执行sudo apt-get install libgdiplus下载安装libgdiplus库

来源地址:c#.用QRCoder包快速生成二维码并向图片写入文字调整位置

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:www.88531.cn资享网,谢谢!^^

© 版权声明
THE END
喜欢就支持一下吧
点赞40 分享