C# QRCode自定义二维码大小

版权声明:authored by zzubqh https://blog.csdn.net/qq_36810544/article/details/81660601

当设置了QRCodeVersion=0之后,二维码的大小会根据文字内容改变,但是更多时候希望二维码的大小由参数指定,通过设置QRCodeScale也可以一定程度上改变大小,不过有个精度问题,我测试了下每降一级大概减少49px,而需求是自定义大小。解决办法,自己写Graphics来渲染

 /// <summary>
 /// 生成二维码
 /// </summary>
 /// <param name="Content">内容文本</param>
 /// <param name="size">图片尺寸(像素)</param>
 /// <param name="margin">图片白边(像素)</param>
 /// <returns></returns>
 public static Bitmap CreateQRCode(string Content, int size, int margin = 5)
 {
     QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
     qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
     qrCodeEncoder.QRCodeScale = 5;
     qrCodeEncoder.QRCodeVersion = 0;

     try
     {
         System.Drawing.Image image = qrCodeEncoder.Encode(Content);
         int resWidth = size + 2 * margin;
         int resHeight = size + 2 * margin;
         // 核心就是这里新建一个bitmap对象然后将image在这里渲染
         Bitmap newBit = new Bitmap(resWidth, resHeight, PixelFormat.Format32bppRgb);
         Graphics gg = Graphics.FromImage(newBit);

         // 设置背景白色
         for (int y = 0; y < resWidth; y++)
         {
             for (int x = 0; x < resHeight; x++)
             {
                 newBit.SetPixel(x, y, Color.White);
             }
         }

         // 设置黑色边框
         for (int i = 0; i < resWidth; i++)
         {
             newBit.SetPixel(i, 0, Color.Black);
             newBit.SetPixel(i, resWidth - 1, Color.Black);

         }

         for (int j = 0; j < resHeight; j++)
         {
             newBit.SetPixel(0, j, Color.Black);
             newBit.SetPixel(resHeight - 1, j, Color.Black);

         }
         gg.DrawImage(image, margin, margin, size, size);
         //newBit.Save(size.ToString() + ".png");
         return newBit;
     }
     catch(Exception ex)
     {
         return null;
     }
 }

猜你喜欢

转载自blog.csdn.net/qq_36810544/article/details/81660601