C#的zxing条码工具

来源:互联网 发布:舰娘国服 知乎 编辑:程序博客网 时间:2024/06/11 19:27

注:使用此工具类时需要引入zxing.dll工具。

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZXing.Common;
using ZXing;
using ZXing.QrCode;
using System.Collections;
using ZXing.QrCode.Internal;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;


namespace www.xinduofen.com
{
    /// <summary>
    /// 二维码和条形码的生成与解析
    /// </summary>
    class MyZxingTool
    {
        /// <summary>
        /// 生成二维码并保存到内存中(UTF-8编码)
        /// </summary>
        /// <param name="contents">二维码字符串内容</param>
        /// <param name="width">二维码宽度</param>
        /// <param name="height">二维码高度</param>
        /// <returns>返回为null代表生成失败</returns>
        public static Bitmap encodeQRCode(String contents, int width, int height)
        {
            Bitmap bitmap = null;


            try {
                EncodingOptions options = new QrCodeEncodingOptions
                {
                    DisableECI = true,
                    CharacterSet = "UTF-8",// 指定编码格式
                    ErrorCorrection = ErrorCorrectionLevel.M,// 指定纠错等级
                    Width = width,
                    Height = height
                };
                BarcodeWriter writer = new BarcodeWriter();
                writer.Options = options;
                writer.Format = BarcodeFormat.QR_CODE;//二维码


                bitmap = writer.Write(contents);//二维码生成成功
            }catch(Exception e){
                System.Console.WriteLine(e.Message);
            }


            return bitmap;
        }
        /// <summary>
        /// 解析二维码
        /// </summary>
        /// <param name="imgPath">二维码图片保存路径</param>
        /// <returns>返回为null代表解析失败</returns>
        public static String decodeQRCode(String imgPath) {
       String resultStr = null;


            try {
                BarcodeReader reader = new BarcodeReader();
                reader.AutoRotate = true;
                //reader.Options.CharacterSet = "UTF-8";
                Result result = reader.Decode(new Bitmap(Image.FromFile(imgPath)));


                resultStr = result.Text;
            } catch (Exception e) {
                System.Console.WriteLine(e.Message);
            }


            return resultStr;
        }
        /// <summary>
        /// 解析二维码
        /// </summary>
        /// <param name="bitmap">二维码缓存图片</param>
        /// <returns>返回为null代表解析失败</returns>
        public static String decodeQRCode(Bitmap bitmap)
        {
            String resultStr = null;


            try
            {
                BarcodeReader reader = new BarcodeReader();
                reader.AutoRotate = true;
                //reader.Options.CharacterSet = "UTF-8";
                Result result = reader.Decode(bitmap);


                resultStr = result.Text;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
            }


            return resultStr;
        }


        /// <summary>
        /// 生成条形码并保存到内存中(code128编码)
        /// </summary>
        /// <param name="contents">条形码字符串内容</param>
        /// <param name="width">条形码宽度</param>
        /// <param name="height">条形码高度</param>
        /// <returns>返回为null代表生成失败</returns>
        public static Bitmap encodeBarCode(String contents, int width, int height)
        {
            Bitmap bitmap = null;


            try
            {
                EncodingOptions options = new QrCodeEncodingOptions
                {
                    Width = width,
                    Height = height
                };
                BarcodeWriter writer = new BarcodeWriter();
                writer.Options = options;
                writer.Format = BarcodeFormat.CODE_128;//条形码


                bitmap = writer.Write(contents);//条形码生成成功
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
            }


            return bitmap;
        }
        /// <summary>
        /// 解析条形码(支持多种编码格式)
        /// </summary>
        /// <param name="imgPath">条形码图片保存路径</param>
        /// <returns>返回为null代表解析失败</returns>
        public static String decodeBarCode(String imgPath) {
            String resultStr = null;


            try
            {
                BarcodeReader reader = new BarcodeReader();
                reader.AutoRotate = true;
                Result result = reader.Decode(new Bitmap(Image.FromFile(imgPath)));


                resultStr = result.Text;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
            }


            return resultStr;
        }
        /// <summary>
        /// 解析条形码(支持多种编码格式)
        /// </summary>
        /// <param name="bitmap">条形码缓存图片</param>
        /// <returns>返回为null代表解析失败</returns>
        public static String decodeBarCode(Bitmap bitmap)
        {
            String resultStr = null;


            try
            {
                BarcodeReader reader = new BarcodeReader();
                reader.AutoRotate = true;
                Result result = reader.Decode(bitmap);


                resultStr = result.Text;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
            }


            return resultStr;
        }


        /// <summary>
        /// 保存缓存图片到指定的文件位置
        /// </summary>
        /// <param name="bitmap">缓存图片</param>
        /// <param name="imageFilePath">指定的文件位置</param>
        /// <param name="imageFormat">用于保存图片的格式,比如:ImageFormat.Jpeg、ImageFormat.Png</param>
        /// <returns>返回为true代表保存成功</returns>
        public static Boolean saveImageToFile(Bitmap bitmap, String imageFilePath, ImageFormat imageFormat)
        {
            Boolean result = false;//初始化为"保存失败"


            try
            {
                bitmap.Save(imageFilePath, imageFormat); 
                result = true;//二维码生成成功
            }catch(Exception e){
                System.Console.WriteLine(e.Message);
            }


            return result;
        }
        /// <summary>
        /// 将Bitmap对象转换成对应格式imageFormat的图片,再将得到的图片数据流转换成Base64字符串
        /// </summary>
        /// <param name="bitmap">Bitmap对象</param>
        /// <param name="imageFormat">用于保存图片的格式,比如:ImageFormat.Jpeg、ImageFormat.Png</param>
        /// <returns>返回为null代表转换失败</returns>
        public static String getBase64StringFromImage(Bitmap bitmap, ImageFormat imageFormat)
        {
            String base64String = null;


            MemoryStream outCache = null;
            try
            {
                outCache = new MemoryStream();
                bitmap.Save(outCache, imageFormat);
                byte[] data = outCache.ToArray();
                base64String = System.Convert.ToBase64String(data, 0, data.Length);
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
            }
            finally {
                if (outCache!=null)
                {
                    outCache.Close();
                    outCache = null;
                }
            }


            return base64String;
        }
    }

}

原创粉丝点击