LeadTools 为你的应用程序选择正确的条码

发布时间:2015/10/23 00:10 发布者:iceman

返回博客中心

简介

大多数人几乎每天都会看到条码。对于软件开发者来说,这为创建同时编码和解码的应用程序提供了巨大的机会。它们会用于零售业、政府、商业、智能手机、web应用等多方面。几乎所有的市场或行业每天都会用到条码。

同时,多样性和市场饱和也带来了挑战。在通往成功的路上一个开发者或项目经理应该怎么做呢?有两个问题应该考虑:我应该在哪里使用条码?我应该怎样使用它们?本文将围绕这些问题展开,我们将为您详细介绍几个最受欢迎的条码,以及程序员如何使用LEADTOOLS屡获殊荣的技术快速轻松的开发他们的应用。

选择正确的条码

在多种可用的条码类型中选择正确的条码对成功的软件应用开发非常重要。大体上划分的话有两种条码类型:一维(也称为线性)和二维。一维条码最简单应用也最广泛,但是保存的信息少。二维条码现在非常流行,因为它可以在小区域内存储大量的信息。然而,并不是选择一维或二维这么简单的决定。下面我们将为您介绍目前最受欢迎的条码以及通常使用它们的方式。

Code 128

这个一维条码因能编码128个ASCII 字符集而得名。令人惊讶的是,它依然可以凭借密集度与其他一维条码竞争。密度和多样性的组合让它成为最广泛使用的条码,用于运输、包装等多方面。

clip_image001

Code 39 (Code 3 of 9)

同样的方式,Code 39这个名称也来源于它能编码的字符位数,但是它已经从39个字符扩展到了43个(0-9, A-Z以及一些特殊字符)。它的密度低于Code 128,是美国国防部、卫生行业条码协会以及其他汽车领域使用的标准条码。

clip_image002

UPC / EAN

通用产品代码(UPC)和欧洲商品编码(EAN)是使用最频繁的条码,广泛用于销售点零售应用程序中的消费品识别。UPC和EAN的主要区别在于EAN使用两位(00-99),UPC使用一位(0-9)。为了确保零售商品的唯一标识,UPC和EAN条码的值由国际委员会设置。这给软件开发者设置了一些限制,但是由于庞大的市场需求和广泛使用,机会依然非常丰富。

clip_image003

QR码

在二维条码中,最知名和最受欢迎的就是QR码。QR码可以将大量的数据信息压缩到一个小空间内:多达2953个字节、4296个字母数字或7089位数字。除了巨大的存储潜力,它还是最健壮和抗差错的条码。因此在图像质量较差的情况下它非常受欢迎,如抖动的手机和手持扫描仪。

clip_image004

PDF417

PDF417是最常见的二维码,在身份证、运输和库存管理系统中大量使用。它可以存储多达1850个ASCII字符,且有弹性误差修正功能,因此非常流行。这些属性允许你编码个人信息和完整的地址,且在极端环境下依旧保持准确性。

clip_image005

数据矩阵

数据矩阵允许最紧凑的信息存储,根据要求的文本或二进制数据的数量决定大小(多达2218个ASCII 字符)。最小的数据矩阵条码可以在几毫米内编码50个字符。它不受消费者欢迎,但是许多公司在自己的内部物流和小条目的识别上利用它的紧凑性。

clip_image006

使用LEADTOOLS条码...和一切!

现在你已经选择了想使用的条码,那么如何将它们添加到你的应用程序中呢?当然,你需要自己编写。对于一些一维条码来说这可能是可行的,但是如果你打算支持二维条码或多个一维条码,就会产生一些重大延误,且需要人员配备。你还有另一个选择:利用其它程序员的专长,使用一个SDK。

根据需求寻觅最佳SDK时需要考虑很多。大多数条形码有直接的规范和标准,因此只要选择的SDK可以根据规则读写就很理想。然而,这假定了每个图像都是干净的,每个照片都有良好的光照,每个文档都是笔直扫描的。这样的情况是不存在的,因此你必须寻找一个不仅限于条码的工具包,这个工具包要能为你提供扫描、清理、预处理和处理部分图像所需的一切。

clip_image008

图1:一个严重受损的PDF417条码,LEADTOOLS仍然可以成功读取

这就是LEADTOOLS擅长的!LEAD科技在创建数字图像软件开发工具包方面拥有20余年的经验,我们已经看到了这一切。开发者在测试不同的条码工具包并决定购买时最大的决定因素是它在自己图像上的表现如何。这实际会带来一个矛盾因为他们开发的应用程序并没有部署到生产,同时他们也没有足够多的图像和场景示例。LEADTOOLS应用于多个不同行业的成千上万个应用程序中,因此你不用担心,它已经被数百万的图像证明和测试过了。

除了准确读取大多数条码的能力,库本身也很容易使用。读写条码只需要几行代码。

// 创建一个条码引擎
BarcodeEngine engine = new BarcodeEngine();
// 在图像中写一个条码(此例中为UPC)
BarcodeData data = new BarcodeData(BarcodeSymbology.UPCA, "01234567890");
data.Bounds = new LogicalRectangle(0, 0, 400, 200, LogicalUnit.Pixel);
engine.Writer.WriteBarcode(myImage, data, null);
// 在默认选项下,读取所有条码
BarcodeData[] barcodes = engine.Reader.ReadBarcodes(myImage, LogicalRectangle.Empty, 0, null);
如上所示,LEADTOOLS为快速轻松读取条码提供了高级的功能,同时还为微调识别过程设置了很多环境和图像选项。当已知条码类型时,你可以限制搜索,指定应用程序使用的条码,这样能大幅度提高性能。

// 创建一个条码引擎
BarcodeEngine engine = new BarcodeEngine();
// 只读取PDF417和数据矩阵条码
PDF417BarcodeReadOptions pdf417Options = new PDF417BarcodeReadOptions();
pdf417Options.BackColor = RasterColor.White;
pdf417Options.ForeColor = RasterColor.Black;
pdf417Options.SearchDirection = BarcodeSearchDirection.Vertical;
 
DatamatrixBarcodeReadOptions dataMatrixOptions = new DatamatrixBarcodeReadOptions();
dataMatrixOptions.BackColor = RasterColor.White;
dataMatrixOptions.ForeColor = RasterColor.Black;
dataMatrixOptions.EnableSmallSymbols = true;
 
BarcodeData[] barcodes = engine.Reader.ReadBarcodes(
   myImage, LogicalRectangle.Empty, 0, 
   new BarcodeSymbology[] { 
      BarcodeSymbology.PDF417, BarcodeSymbology.Datamatrix}, 
   new BarcodeReadOptions[] { pdf417Options, dataMatrixOptions });

clip_image010

图2:缩小读取选项来读取条码。注意:PDF417条码存在,但是没有被返回,因为设置引擎只进行垂直搜索。

最后,LEADTOOLS能够为你的条码应用程序提供综合的解决方案,因此减少了混合使用多个SDK的麻烦。你不能小看这个优点,因为试图理解在不同的开发包之间传递信息和图像对程序员来说不仅仅是不方便这么简单。同时它还会影响终端用户,因为应用程序并没有达到最大的运行效率。因此,LEADTOOLS中的一切都在无缝的工作,不需要多余的CPU周期和RAM,最终产品的整体质量很赞。

总结

LEADTOOLS可以提高整个软件的开发生命周期:计划支持哪种条码、轻松编写实际代码、处理实际的图像,提供一流的应用程序。一旦你开始在应用中使用LEADTOOLS,就会很快明白为什么它是世界一流的图像开发工具包。


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网