怎么用NuGet和配置log4net就不介绍了,直接上代码(QRDecodeDemo.zip)。

(Visual Studio 2015 下的项目,用的.NET Framework 4.5.2)

吐槽一下博客园无法插入代码块…… 排版丑点凑合一下,如下:

using System;

using System.IO;

using System.Drawing;
using System.Configuration;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using log4net;
namespace QRDecodeConsoleApp
{
    class Program
    {
        /// <summary>
        /// 私有日志对象
        /// </summary>
        private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        /// <summary>
        /// 识别指定目录下的全部二维码图片(PNG)
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            try
            {
                string[] files;
                if (args.Length > 0)
                {
                    files = Directory.GetFiles(args[0], "*.png");//CMD里exe后的参数
                }
                else
                {
                    //读取指定路劲(QRDecodeConsoleApp.exe.config里配置的路劲)
                    files = Directory.GetFiles(ConfigurationManager.AppSettings["QRImgPath"], "*.png");
                }
                //存放结果的文件
                string filePath = "txtResult" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".config";
                CreateTxtFile(filePath, "");//初始为空
                //一个个读取并追加到记录文件
                for (int i = 0; i < files.Length; i++)
                {
                    File.AppendAllText(filePath, CodeDecoder(files[i]) + "\t" + files[i] + "\n");//追加到文件里记录
                    logger.Info("第" + i + "个识别成功");
                    Console.WriteLine("第" + i + "个识别成功");
                }
                Console.WriteLine("识别完成,按任意键退出");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("识别出错:" + ex.Message);
                logger.Error("识别出错");
                logger.Error("异常描述:\t" + ex.Message);
                logger.Error("异常方法:\t" + ex.TargetSite);
                logger.Error("异常堆栈:\t" + ex.StackTrace);
                Console.ReadLine();
            }
        }
        /// <summary>
        /// 读取图片文件,识别二维码
        /// </summary>
        /// <param name="filePath">图片文件路劲</param>
        /// <returns>识别结果字符串</returns>
        public static string CodeDecoder(string filePath)
        {
            string decoderStr;
            try
            {
                if (!System.IO.File.Exists(filePath))//判断有没有需要读取的主文件夹,如果不存在,终止  
                    return null;
                Bitmap bitMap = new Bitmap(Image.FromFile(filePath));//实例化位图对象,把文件实例化为带有颜色信息的位图对象  
                QRCodeDecoder decoder = new QRCodeDecoder();//实例化QRCodeDecoder  
                decoderStr = decoder.decode(new QRCodeBitmapImage(bitMap), System.Text.Encoding.UTF8);//通过.decoder方法把颜色信息转换成字符串信息  
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return decoderStr;//返回字符串信息  
        }
        /// <summary>
        /// 创建文本类型文件
        /// </summary>
        /// <param name="filename">文件名(.config、.txt文件等)</param>
        /// <param name="txtStr">文件内容字符串</param>
        static void CreateTxtFile(string filename, string txtStr)
        {
            try
            {
                FileStream fs = new FileStream(filename, FileMode.Create);//生成文件
                byte[] data = System.Text.Encoding.UTF8.GetBytes(txtStr);//获得字节数组
                fs.Write(data, 0, data.Length);//开始写入
                fs.Flush();//清空缓冲区
                fs.Close();//关闭流
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

分享一个二维码图片识别控制台程序Demo的更多相关文章

  1. 一个二维码如何自动识别是安卓(Android)还是苹果(IOS)

    思考问题: 通常,我们开发一个APP,有Android版本.IOS版本. 但是只有一个二维码?怎么办呢? 怎么让IOS用户扫描二维码下载IOS版本,Android用户扫描二维码下载到Android版本 ...

  2. Android生成二维码--保存和分享二维码图片

    之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...

  3. qrcode.js的识别解析二维码图片和生成二维码图片

    qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c ...

  4. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

  5. C#&.Net干货分享-构造QRCoderHelper生成二维码图片

    不想说废话,直接源码拿去用... /// <summary>    /// 二维码管理    /// </summary>    public class QRCoderHel ...

  6. jquery生成二维码图片

    1.插件介绍 jquery.qrcode.min.js插件是jq系列的基于jq,在引入该插件之前要先引入jq.能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生 ...

  7. vue2.0生成二维码图片并且下载图片到本地兼容写法

    vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题) 第一步,下载插件 需要注意,这里下载的是qrcodejs2 cnpm install --save qrcod ...

  8. java--实现将文字生成二维码图片,并在中间附上logo,下方附上文字

    前段时间因为工作需要,要实现将一段文字或者url生成二维码,然后中间附上logo,下方正中间附上文字的功能. 上网找了几篇教程学习了下,由于没有保存借鉴的博文链接,所以就没po上参考文章的链接啦,感谢 ...

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

    1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...

随机推荐

  1. SpringMVC架构的项目,js,css等静态文件导入有问题

    发生原因 <servlet> <servlet-name>springmvc-mybaits</servlet-name> <servlet-class> ...

  2. python多进程--------linux系统中python的os.fork()方法

    linux下python 创建子进程的原理: os.fork()方法 的原理 为了实现并发.多任务,我们可以在主程序种开启一个进程或者线程.在类unix操作系统当中(非windows),可以用pyth ...

  3. 南京邮电大学java第一次实验报告

    实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...

  4. [转]map函数补充

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于li ...

  5. jquery mouseout mouseover 多次执行

    用jquery,mouseout,mouseover,随着鼠标移动,事件被触发了多次(冒泡),换成js onmouseover,onmouseout也是一样.最终的解决办法是,用jquery,mous ...

  6. heightcharts点击曲线图获取返回值的问题(ios点击图表第一次无法触发点击事件解决方法)

    需求:用的heightcharts插件,点击曲线图想获得所点击点的返回值,如图 问题代码: (function chart_line(){ var data={"title":[& ...

  7. ABP框架 - N层架构

    目录 介绍 DDD分层 ABP架构模型 客户端 展现层 分布式服务层 应用层 领域层 基础设施层 介绍 在应用程序设计中,分层架构是一种被广泛使用的技术,它助于降低复杂度和提高代码的可重用性.在ABP ...

  8. win10下 github+hexo搭建个人博客.md

    我的博客地址 https://chenxianfu.github.io/ 遇到的坑 hexo 问题 4000端口打不开,可能端口占用,请输入一下命令 hexo server -p 4001 针对很多人 ...

  9. 031718-js变量、数据类型、运算符

    1.关键字.标识符.变量(是一个名称,最好用字母开头,对大小写敏感).常量 (是有数据类型的一个值) 变量: ①定义并赋值 ②使用   2.数据类型:数字  字符串  布尔  null  undefi ...

  10. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...