ZXing.NET(条码、二维码)

   

ZXing.NET用来生成和解释 (条码、二维码)

添加引用:zxing.dll、zxing.presentation.dll

1 生成 (条码、二维码)主要用到 BarcodeWriter、BarcodeFormat、EncodingOptions、BitmapRenderer 这几个类。

2  解释 (条码、二维码)主要用到 BarcodeReader、DecodingOptions 这两个类。

  /// <summary>
  /// 条码、二维码
  /// </summary>
  public static class BarQrCodeHelper
  {
    /// <summary>
    /// 生成条码、二维码
    /// </summary>
    /// <param name="code">要编码内容</param>
    /// <param name="format">编码格式(条码CODE_128、二维码QR_CODE)</param>
    /// <param name="options">编码参数(条码EncodingOptions、二维码QrCodeEncodingOptions)</param>
    /// <param name="renderer">条码、二维码Bitmap参数</param>
    /// <param name="qrcodeoptions">二维码参数</param>
    /// <returns></returns>
    public static Bitmap EncodeBarQrCode(string code, BarcodeFormat format, EncodingOptions options, BitmapRenderer renderer = null, QrCodeOptions qrcodeoptions = null)
    {
      BarcodeWriter writer = new BarcodeWriter();
      writer.Options = options;
      writer.Format = format;
      if (renderer != null)
        writer.Renderer = renderer;
      Bitmap bmp = writer.Write(code);

      if ((options is QrCodeEncodingOptions) && qrcodeoptions != null && qrcodeoptions.IsLogo)
      {
        int w = qrcodeoptions.Width - qrcodeoptions.LogoPadding * 2;
        int h = qrcodeoptions.Height - qrcodeoptions.LogoPadding * 2;
        Rectangle logo_rect = new Rectangle((bmp.Width - w) / 2, (bmp.Height - h) / 2, w, h);
        if (qrcodeoptions.LogoPadding == 0)
        {
          logo_rect = new Rectangle((bmp.Width - qrcodeoptions.Width) / 2, (bmp.Height - qrcodeoptions.Height) / 2, qrcodeoptions.Width, qrcodeoptions.Height);
        }

        Graphics bmp_g = Graphics.FromImage(bmp);
        bmp_g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        bmp_g.CompositingQuality = CompositingQuality.HighQuality;
        bmp_g.SmoothingMode = SmoothingMode.AntiAlias;

        Bitmap logo_bmp = (Bitmap)qrcodeoptions.Logo;//按比例缩放Logo
        if ((qrcodeoptions.Logo.Width > logo_rect.Width || qrcodeoptions.Logo.Height > logo_rect.Height) || (qrcodeoptions.Logo.Width < logo_rect.Width && qrcodeoptions.Logo.Height < logo_rect.Height))
        {
          logo_bmp = new Bitmap(logo_rect.Width, logo_rect.Height);
          Graphics logo_g = Graphics.FromImage(logo_bmp);
          logo_g.InterpolationMode = InterpolationMode.HighQualityBicubic;
          logo_g.CompositingQuality = CompositingQuality.HighQuality;
          logo_g.SmoothingMode = SmoothingMode.AntiAlias;

          Rectangle rect = new Rectangle(0, 0, 0, 0);
          float num1 = (float)logo_rect.Width / (float)qrcodeoptions.Logo.Width;
          float num2 = (float)logo_rect.Height / (float)qrcodeoptions.Logo.Height;
          float num3 = Math.Min(num1, num2);
          rect.Width = (int)((float)qrcodeoptions.Logo.Width * (float)num3);
          rect.Height = (int)((float)qrcodeoptions.Logo.Height * (float)num3);
          rect.X = (logo_rect.Width - rect.Width) / 2;
          rect.Y = (logo_rect.Height - rect.Height) / 2;

          logo_g.DrawImage((Bitmap)qrcodeoptions.Logo, rect);
          logo_g.Dispose();
        }

        Bitmap corner_bmp = new Bitmap(logo_rect.Width, logo_rect.Height);//圆角处理
        Graphics corner_g = Graphics.FromImage(corner_bmp);
        corner_g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        corner_g.CompositingQuality = CompositingQuality.HighQuality;
        corner_g.SmoothingMode = SmoothingMode.AntiAlias;

        corner_g.SetClip(CreateRoundedRectanglePath(new Rectangle(0, 0, logo_rect.Width, logo_rect.Height), qrcodeoptions.Radius));
        corner_g.DrawImage(logo_bmp, new Rectangle(0, 0, logo_bmp.Width, logo_bmp.Height));
        logo_bmp.Dispose();

        if (qrcodeoptions.LogoPadding != 0)
        {
          Pen padding_pen = new Pen(Color.Gray);
          SolidBrush padding_sb = new SolidBrush(qrcodeoptions.LogoBackColor);
          Rectangle padding_rect = new Rectangle((bmp.Width - qrcodeoptions.Width) / 2, (bmp.Height - qrcodeoptions.Height) / 2, qrcodeoptions.Width, qrcodeoptions.Height);
          GraphicsPath padding_path = CreateRoundedRectanglePath(padding_rect, qrcodeoptions.Radius);
          bmp_g.FillPath(padding_sb, padding_path);
          bmp_g.DrawPath(padding_pen, padding_path);
          padding_sb.Dispose();
          padding_pen.Dispose();
          padding_path.Dispose();
        }

        bmp_g.DrawImage(corner_bmp, logo_rect);

        corner_bmp.Dispose();
        corner_g.Dispose();
        bmp_g.Dispose();
      }
      return bmp;
    }

    /// <summary>
    /// 解释条码、二维码
    /// </summary>
    /// <param name="code">要解码内容</param>
    /// <param name="options">解码参数</param>
    /// <returns></returns>
    public static string DecodeBarQrCode(Bitmap code, DecodingOptions options)
    {
      BarcodeReader reader = new BarcodeReader();
      reader.Options = options;
      reader.AutoRotate = true;
      Result result = reader.Decode(code);
      return result != null ? result.Text : String.Empty;
    }

    /// <summary>
    /// 创建圆角矩形
    /// </summary>
    /// <param name="rect">区域</param>
    /// <param name="cornerRadius">圆角角度</param>
    /// <returns></returns>
    private static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
    {
      GraphicsPath result = new GraphicsPath();
      int diameter = cornerRadius * 2;

      result.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
      result.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius, rect.Y);

      result.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
      result.AddLine(rect.Right, rect.Y + cornerRadius, rect.Right, rect.Bottom - cornerRadius);

      result.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
      result.AddLine(rect.Right - cornerRadius, rect.Bottom, rect.X + cornerRadius, rect.Bottom);

      result.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
      result.AddLine(rect.X, rect.Bottom - cornerRadius, rect.X, rect.Y + cornerRadius);

      result.CloseFigure();
      return result;
    }

    /// <summary>
    /// 二维码参数
    /// </summary>
    public class QrCodeOptions
    {
      public QrCodeOptions()
      {

      }

      public QrCodeOptions(int _Radius, bool _IsLogo, Image Logo, int _Width, int _Height, int _LogoPadding, Color _LogoBackColor, Color _LogoBorderColor)
      {
        this.Radius = _Radius;
        this.IsLogo = _IsLogo;
        this.Logo = Logo;
        this.Width = _Width;
        this.Height = _Height;
        this.LogoPadding = _LogoPadding;
        this.LogoBackColor = _LogoBackColor;
        this.LogoBorderColor = _LogoBorderColor;
      }

      /// <summary>
      /// 圆角度数
      /// </summary>
      public int Radius = 4;
      /// <summary>
      /// 是否显示Logo
      /// </summary>
      public bool IsLogo = false;
      /// <summary>
      /// Logo图片
      /// </summary>
      public Image Logo;
      /// <summary>
      /// Logo宽度
      /// </summary>
      public int Width;
      /// <summary>
      /// Logo高度
      /// </summary>
      public int Height;
      /// <summary>
      /// Logo内边距
      /// </summary>
      public int LogoPadding = 4;
      /// <summary>
      /// Logo内边距背景颜色
      /// </summary>
      public Color LogoBackColor = Color.White;
      /// <summary>
      /// Logo边框颜色
      /// </summary>
      public Color LogoBorderColor = Color.Gray;
    }
  }

原文地址:https://www.cnblogs.com/tlmbem/p/10813924.html

时间: 2024-07-31 13:34:01

ZXing.NET(条码、二维码)的相关文章

servlet中用ZXing生成条码二维码并输出到web页面的示例

1.生成条码的servlet代码: import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletR

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)

一.ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.现在也有了对应的.Net版本 二.生成二维码 将字符编码时可以指定字符格式:默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符

在Android用ZXing.jar识别二维码的精简版(简化了配置和代码)

最近公司做了一款OTP令牌激活的产品,由于之前激活手机令牌需要输入很多的激活信息才能进行激活.经过一段使用后,发现易用性不是很强,考虑如果加入二维码的的扫码功能岂不是大大增加了易用性.     在网上搜了很多资料,要不是配置太多,要不就是代码量太大,最后没办法就硬着头皮去写和去精简,最后压缩至目前的版本.如果有更好的版本可以联系我. 具体DEMO可以通过 下载http://download.csdn.net/detail/fugui6611634/7341277下载 本文代码运行的结果如下: 代

Android自由行之走进zxing,轻松实现二维码扫描

现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. 开源下载:http://code.google.com/p/zxing/ zxing是基于多种1D/2D条码处理的开源库,是一个完整的项目.它可以通过手机摄像头实现条码的扫描以及解码,功能及其强大.那么如果要实现二维码的扫描以及解码,我们需要在该开源项目的基础上进行简化,并修改.让我们来看一下  

Android开源之行之走进zxing,轻松实现二维码扫描(一)

现在很多App都集成了扫一扫功能,最常用的微信.QQ.手机助手等.二维码也使得生活变得更加简洁,扫一扫订餐.扫一扫下载等等.那么,说到二维码,我们不得不提Google一个开源的扫码框架:zxing. 开源下载:http://code.google.com/p/zxing/ zxing是基于多种1D/2D条码处理的开源库,是一个完整的项目.它可以通过手机摄像头实现条码的扫描以及解码,功能及其强大.那么如果要实现二维码的扫描以及解码,我们需要在该开源项目的基础上进行简化,并修改.让我们来看一下  

C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)

原文:http://blog.csdn.net/kongwei521/article/details/17588825 首先效果: 1:首先下载BarcodeLib.dll 下载地址 http://pan.baidu.com/share/link?shareid=2590968386&uk=2148890391&fid=1692834292 如果不存在了则自行搜索下载. 1.BarcodeLib.dll 一维条码库支持以下条码格式 UPC-A UPC-E UPC 2 Digit Ext.

Java生成条码二维码

一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https://github.com/zxing/zxing 二.barcode4j 关键代码: DataMatrixBean bean = new DataMatrixBean(); final int dpi = 800; String format = "image/png"; ByteArr

[Python]在Windows系统中使用ZXing模块实现二维码、条形码读码

??需要实现Python读取图片中二维码.条形码信息.前段时间研究使用zbarlight模块,费了很大功夫安装调试好,但是发现有些图片读取不正确,而且如果图片中二维码倾斜,就读取不了,不能满足要求.昨天琢磨着试一试ZXing,下载ZXing模块安装后,却一直报错.打开模块源码仔细分析,原来该模块是通过调用java程序,使用ZXing的java库来实现的,通过分析命令行输出得到解码结果.忙活了一天多,各种测试.查资料,终于解决了问题.调试过程非常艰辛,现将做法整理如下(Windows 10系统):

Java使用ZXing生成/解析二维码图片

ZXing是一种开源的多格式1D/2D条形码图像处理库,在Java中的实现.重点是在手机上使用内置摄像头来扫描和解码设备上的条码,而不与服务器通信.然而,该项目也可以用于对桌面和服务器上的条形码进行编码和解码.目前支持这些格式: UPC-A and UPC-E EAN-8 and EAN-13 Code 39 Code 93 Code 128 ITF Codabar RSS-14 (all variants) RSS Expanded (most variants) QR Code Data M

【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)

ZXing .NET 的项目主页https://zxingnet.codeplex.com/ 代码基本上抄袭自下面两篇文章 XDhttp://www.cnblogs.com/tianma3798/p/5426869.htmlhttp://www.cnblogs.com/tianma3798/p/5426880.html 仅作参数优化,更加实用和简便一点 Shared Function MakeQR(ByVal qrtext As String, Optional ByVal width As I