一、简介

Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。Data-Matrix二维条码是一种矩阵式二维条码。

Data Matrix符号由规则排列的深浅色正方形模块构成,每个正方形模块就是一个基本单元,每个基本单元又被编码为一比特的数据。数据区的四周是探测图形,用于条码符号定位和确定条码结构信息。探测图形的四周是空白区,用以将条码符号与背景分离。

探测图形是一个模块的宽度,是数据区的边界,其中全部由深色模块组成的两条邻边构成了一个“L”形实线边缘,“L”对面由交替的深浅模块组成的两条邻边又构成了虚线边缘。探测图形主要用于限定符号的单元结构,也可用于确定符号的物理尺寸,以及解决符号定位和失真等问题。

数据区是由多个正方形深浅模块所组成的正方形区域,信息储存方式是深浅模块的不同排列组合.以二进制码方式来编码数据,因此计算机可直接读取。深色模块代表“1”,浅色模块代表“0”,再利用成串的特定排列的深浅模块来描述码字信息,再排列成一个矩阵式符号,最终形成Data Matrix条码。

因此,任意Data Matrix符号可以由四个部分构成:探测图形中“L”形的两条实线边缘、探测图形中“L”形对面的两条虚线边缘、被探测图形包围的数据区、条码符号四周的一个模块宽度的空白区。

Data Matrix条码编码是将物品信息转化成为数据码字流,用二维条码符号来表示实现。允许输入数据信息多样,可以是数字和字母,可以是常规的文字、字符信息,还可以是多媒体信息,如声音、图片、指纹等。

Data Matrix分为ECC 000-140和ECC 200两个大类,ECC 000-140具有四个等级的卷积纠错功能,ECC 200则通过Reed—Solomon纠错算法计算纠错码,根据符号的不同尺寸得到不同的纠错码。两类符号的外形区别在于,ECC 000-140符号的右上角为深色模块(仅为奇数),尺寸从9*9至49*49。ECC 200符号的右上角为浅色模块(仅为偶数),尺寸从10*10至144*144,若为长方形则从8*18至16*48。ECC 200应用较多。

Data Matrix编码包括三个部分:一是将数据信息流通过最优的编码规则转换成数据码字;二是根据Reed-Solomon算法以及响应的纠错要求,在数据码字的基础上生成纠错码字,数据码字加上纠错码字及可能需要的若干填充字符,构成编码后的码字流;三是将按照标准模板将单元模块放置到矩阵中,并加入探测图形,生成Data Matrix二维矩阵码符号。

Data Matrix二维条码图像的识别主要包括图像预处理、条码定位、采样解码。

Data Matrix条码图像预处理:首先对采集到的彩色图像灰度化;然后对灰度图像进行滤波去噪;选取适当的阈值进行图像二值化;最后进行边缘提取。

条码定位:区域初定位、边缘检测、旋转校正、精确提取、条码分割(网格)。

Data Matrix条码解码识别:根据采样网格,将深浅模块转换为“1”、“0”矩阵;去除探测图形,提取出数据区,并得到条码尺寸和版本信息;调用模块放置矩阵恢复正确顺序的码字流;再确定数据码字和纠错码字,并进行条码数据的检错纠错;最终恢复原始数据,正确解码输出。
二、实现

        public ActionResult DATA_MATRIX()
{
DatamatrixEncodingOptions options = new DatamatrixEncodingOptions();
options.DefaultEncodation = Encodation.ASCII; /*指定默认编码确保内容符合编码值,否则将抛出异常。 标准值:Encodation.ASCII*/
//options.MinSize = new Dimension(100, 100); //指定最小条形码大小 当SymbolShapeHint.FORCE_NONE时 有效
//options.MaxSize = new Dimension(150, 120); //指定最大条形码大小 当SymbolShapeHint.FORCE_NONE时 有效
options.SymbolShape = SymbolShapeHint.FORCE_SQUARE; //条码形状
options.GS1Format = true; //是否符合GS1 不会用
options.Width = ; //图片宽度
options.Height = ; //图片高度 BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.DATA_MATRIX;
writer.Options = options; //如需设置图片为其它颜色,使用此段代码
//BitmapRenderer renderer = new BitmapRenderer();
//renderer.Foreground = Color.Black;
//renderer.Background = Color.White;
//writer.Renderer = renderer; Bitmap bmp = writer.Write("");
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Png);
ms.Flush();
ms.Position = ;
return File(ms, "application/x-png");
}

测试图像如下:

三、解码

点击查看

(zxing.net)二维码Data Matrix的简介、实现与解码的更多相关文章

  1. 二维码Data Matrix的解码实现(zxing-cpp)

    二维码Data Matrix的介绍可以参考http://blog.csdn.net/fengbingchun/article/details/44279967 ,以下是通过zxing-cpp开源库实现 ...

  2. 二维码Data Matrix编码、解码使用举例

    二维码Data Matrix的介绍见: http://blog.csdn.net/fengbingchun/article/details/44279967  ,这里简单写了个生成二维码和对二维码进行 ...

  3. 二维码Data Matrix简单介绍及在VS2010中的编译

    Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码 ...

  4. (转)ZXing解析二维码

    1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImag ...

  5. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  6. 通过zxing生成二维码

    二维码现在随处可见,在日常的开发中,也会经常涉及到二维码的生成,特别是开发一些活动或者推广方面的功能时,二维码甚至成为必备功能点.本文介绍通过 google 的 zxing 包生成带 logo 的二维 ...

  7. Android利用zxing生成二维码

    感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...

  8. 提高zxing生成二维码的容错率及zxing生成二维码的边框设置

    最近做了一个项目要生成二维码,跟几年前不同,最近大家都喜欢在二维码中间加logo. 加logo倒是不难,两个图片叠一起就是了,但是遇到一个新问题,logo加得太大的话,会导致二维码扫描不出来;加的太小 ...

  9. 【转】Android平台下利用zxing实现二维码开发

    http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...

随机推荐

  1. 给iOS开发新手送点福利,简述UIButton的属性和用法

    UIButton属性 1.UIButton状态: UIControlStateNormal          // 正常状态    UIControlStateHighlighted     // 高 ...

  2. 浅谈Storm流式处理框架

    Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据.但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂. 有需求也就有创造,在Hadoop基本奠定了大数据霸 ...

  3. signal模块简介

    signal模块简介 最近在看Linux signal 相关内容,signal可以被用来进程间通信和异步处理.Python标准库提供了signal包可以用来处理信号相关.这里讨论的是Unix系统中Py ...

  4. Rhythmk 一步一步学 JAVA (18): Enum枚举学习

    枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...

  5. ffmpeg默认输出中文为 UTF-8

    在使用ffmpeg 进行对音视频文件解码输出信息的时候会出现乱码. 从网上找到了说ffmpeg默认格式 为 utf-8 如果vs工程使用的的 Unicode 则需要将 utf-8转 Unicode 才 ...

  6. http://www.5xcg.com/bbs/forum.php?mod=viewthread&tid=51143&extra=page%3D1

    http://www.5xcg.com/bbs/forum.php?mod=viewthread&tid=51143&extra=page%3D1 因为身在酒店设备有限,只能尽量把文字 ...

  7. JS计算字符长度、字节数 -- 转

    一个汉字在UTF-8编码中占用几个字节? 占用3个字节的范围 U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 个 U+2F00 - U+ ...

  8. VS Code 界面语言设置

    首先Ctrl+shift+p打开命令面板. 输入配置显示语言 回车 更改locale即可更改页面显语言(更改后需重启软件). 目前支持如下语言 Display Language Locale Engl ...

  9. NBU 还原windows ORACLE数据库(EC)

    rman target / startup nomount; run{ allocate channel ch00 type 'SBT_TAPE'; send 'nb_ora_serv=nbumast ...

  10. java基础三 [深入多态,接口和多态](阅读Head First Java记录)

    抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{      public void roam ...