当前位置:   article > 正文

香橙派 ubuntu c# .net 使用ThoughtWorks.QRCodCore库生成 或识别 二维码,及报错处理方法_qrcodecore

qrcodecore

在linux下生成和识别二维码,试了大半天,找到个库测试通过可以使用

ThoughtWorks.QRCodCore 

其它的库有些仅在window下可用,有些使用困难

这里如果你在linux下跑的话,一定要安装

skiaSharp.NativeAssets.Linux 库

不然在window下正常,在linux下会报错

da92e7354fb141689a2923fbe058dc43.png

测试的时候提示报错如下

unable to load shared library libgdiplus or one of its dependencies

9f508e25ac5c4dbca2ec47dad4d83e6a.jpeg

 缺少图型库 libgdiplus 

运行指令安装 解决

apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev

上代码:

生成二维码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.Text;
  6. using ThoughtWorks.QRCode.Codec;
  7. using ThoughtWorks.QRCode.Codec.Data;
  8. namespace Service.QRcode
  9. {
  10. public class QRcodeThoughtWorks
  11. {
  12. public void test()
  13. {
  14. string filename = AppDomain.CurrentDomain.BaseDirectory + "/" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
  15. //生成
  16. CreateQRImg(@"test", filename);
  17. // Thread.Sleep(2000);
  18. //
  19. string result = GetImageFile(filename);
  20. Console.WriteLine("结果:" + result);
  21. }
  22. /// <summary>
  23. /// 生成并保存二维码图片的方法
  24. /// </summary>
  25. /// <param name="str">输入的内容</param>
  26. private void CreateQRImg(string str, string filename)
  27. {
  28. Bitmap bt;
  29. string enCodeString = str;
  30. //生成设置编码实例
  31. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  32. qrCodeEncoder.QRCodeBackgroundColor = Color.White;//设置二维码背景颜色
  33. qrCodeEncoder.QRCodeForegroundColor = Color.Black;//设置二维码前景色
  34. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//设置二维码编码类型
  35. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//设置二维码拍错率
  36. qrCodeEncoder.QRCodeScale = 4;//设置二维码的大小
  37. qrCodeEncoder.QRCodeVersion = 7;//设置二维码的版本
  38. //Bitmap bmp = qRCodeEncoder.Encode(str);
  39. 设置二维码的规模 默认 4
  40. //qrCodeEncoder.QRCodeScale = 4;
  41. 设置二维码的版本 默认 7
  42. //qrCodeEncoder.QRCodeVersion = 7;
  43. 设置错误检验级别 默认为中等
  44. //qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  45. //生成二维码图片
  46. bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
  47. //二维码图片名称
  48. bt = RedrawQrImg(bt);
  49. //保存二维码图片在photos路径下
  50. bt.Save(@"" + filename);
  51. //图片控件要显示的二维码图片路径
  52. }
  53. /// <summary>
  54. /// 将二维码转换成网页可以显示的数据
  55. /// </summary>
  56. /// <param name="qrcode"></param>
  57. /// <returns></returns>
  58. public static string GetQrcodeImageData(string qrcode)
  59. {
  60. QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  61. qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  62. qrCodeEncoder.QRCodeScale = 12;
  63. qrCodeEncoder.QRCodeVersion = 2;
  64. qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
  65. var bmp = qrCodeEncoder.Encode(qrcode);
  66. byte[] b = null;
  67. using (MemoryStream stream = new MemoryStream())
  68. {
  69. bmp.Save(stream, ImageFormat.Jpeg);//将图像以指定的格式存入缓存内存流
  70. b = new byte[stream.Length];
  71. stream.Position = 0;
  72. stream.Read(b, 0, Convert.ToInt32(b.Length));
  73. }
  74. return "data:image/jpeg;base64," + Convert.ToBase64String(b);
  75. }
  76. /// <summary>
  77.     /// 对二维码图片进行处理
  78.     /// </summary>
  79.     /// <param name="QrImg">二维码</param>
  80.     /// <returns>处理过后的二维码</returns>
  81. public Bitmap RedrawQrImg(Bitmap QrImg)
  82. {
  83. Bitmap bitmap = new Bitmap(QrImg.Width + 3, QrImg.Height + 3);
  84. Graphics g = Graphics.FromImage(bitmap);
  85. g.Clear(Color.White);
  86. g.DrawRectangle(new Pen(Color.White), new Rectangle(0, 0, bitmap.Width, bitmap.Height));
  87. g.DrawImage(QrImg, new PointF(2, 2));
  88. return bitmap;
  89. }
  90. /// <summary>
  91. /// 二维码解码
  92. /// </summary>
  93. /// <param name="filePath">图片路径</param>
  94. /// <returns></returns>
  95. public static string GetImageFile(string filePath)
  96. {
  97. try
  98. {
  99. if (!File.Exists(filePath))
  100. return "not filepath";
  101. Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
  102. QRCodeDecoder decoder = new QRCodeDecoder();
  103. string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap), Encoding.UTF8);
  104. return decodedString;
  105. }
  106. catch (Exception ex)
  107. {
  108. return ex.ToString();
  109. }
  110. }
  111. }
  112. }

复制即可使用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/715759
推荐阅读
相关标签
  

闽ICP备14008679号