编写条形码、边界和XModule

条形码有很多种形状和形式,但它们都有一个“符号”的概念。这可以是一维线性条码中的竖条,也可以是二维条码中的一个点。以下是常用条码的例子:

UPC-A
QR

UPC-A的例子。典型的一维条码

QR的例子。典型的二维条码

符号的宽度称为X模块条码的一种,通常以1/1000英寸为单位表示。该值必须有足够的大小,以便软件和专用的条形码阅读器能够正确读取条形码。X模块的典型值是0.03英寸。在成像方面,这个值依赖于图像的分辨率,例如分辨率为300 DPI的图像;这个值是9像素,以此类推。2像素值通常是软件可读的X模块最小大小。

条形码的另一个特点是宽高比。一些条形码有宽松的规则,如UPC-A,而另一些则有限制,如QR,必须总是方形。

在编写条形码时,软件必须确保最终结果满足上述条件。否则,最终的条码图像将不可读。

BarcodeWriter对象包含WriteBarcode用于将条形码写入图像的方法。该方法接受类型的对象BarcodeData其中包含了条形码的符号、数据、位置和大小。的位置和大小指定BarcodeData。界限财产。

对于此帮助主题中的所有代码片段,请使用以下方法:

一维条形码

本节将讨论以下属性:

在写入一维条码时,可以通过以下两种方式设置条码的大小:

无X模组的1D条形码

在这种模式下,指示条形码编写器从指定的宽度和高度计算X模块值。为此,将“Use X Module”属性值设置为,并设置所需的宽度和高度BarcodeData。界限

例子:在图像上写一个UPC-A条码,宽度和高度= 400 * 400像素。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(0,0,400,400)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(0,0,400,400);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条形码的大小是400 * 400像素。

注意,并不是所有1D条形码类型都允许指定任意的宽高比(宽度和高度值),一些条形码标准规定条形码宽度和高度必须有特定的宽高比,例如,如果您更改上面的代码以使用POSTNET条形码类型,结果将会不同。

例子:在图像上写一个宽度和高度= 400 * 400像素的POSTNET条形码。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.PostNet)数据。边界=LeadRect(0,0,400,400)昏暗的writeOptions作为PostNetPlanetBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、PostNetPlanetBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.PostNet);数据。边界=LeadRect(0,0,400,400);PostNetPlanetBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为PostNetPlanetBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条形码的尺寸是400 * 30像素。

将条形码边界的高度设置为0,以指示引擎根据预定义的宽高比从宽度计算条形码的高度。

例子:在图像上写一个UPC-A条码,宽度和高度= 400 * 0像素。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(0,0,400,0)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(0,0,400, 0);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条形码的尺寸是400 * 134像素

除PatchCode外,1D条形码的默认纵横比都是1/3,PatchCode的纵横比是5。

在上述所有模式中,引擎将从指定的宽度值计算X模块。如果结果值是非法的(小于0.03英寸),则类型的异常BarcodeException宽度代码设置为BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight将抛出。

例子:在图像上写一个UPC-A条码,宽度和高度都太小(10 * 10像素)。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(0,0,10,10)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(0,0,10,10);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:BarcodeException代码=BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight将抛出。

带有X模块的1D条形码

在此模式下,使用特定的X Module值。要实现这一点,您可以将“Use X Module”属性值设置为真正的

例子:在图像上用XModule = 0.03英寸写一个UPC-A条码。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(0,0,0,0)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)使用X模块writeOptions。UseXModule =真正的writeOptions。XModule = 30barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(0,0,0,0);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//使用X模块writeOptions。UseXModule =真正的writeOptions。XModule = 30;barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条码宽度由数据的大小决定(所需的栏数和空格数、文本选项等)。高度是根据符号的首选长宽比计算的。

在使用X Module时指定宽度或高度(两者都有,或者设置一个值,另一个值为0)。在本例中,这些边界被用作条形码的最大宽度和高度,如果结果条形码的宽度或高度大于指定的值,则出现类型异常BarcodeException宽度设置为BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight将抛出。

例子:在图像上写一个UPC-A条形码,用XModule = 0.03英寸和边界,这太小了。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(0,0,10,10)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)使用X模块writeOptions。UseXModule =真正的writeOptions。XModule = 30barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(0,0,10,10);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//使用X模块writeOptions。UseXModule =真正的writeOptions。XModule = 30;barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:BarcodeException代码=BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight将抛出。

一维条形码的位置

的左、顶位置BarcodeData。界限在编写一维条码时专用。

例子:在图片左上角100,200的位置写上UPC-A条码,尺寸为400 * 100。以像素为单位。

VB
昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界=LeadRect(100, 200, 400, 100)昏暗的writeOptions作为OneDBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、OneDBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界=LeadRect(100, 200, 400, 100);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条形码在100,200大小为400 * 100像素。

BarcodeData。界限属性的类型为LeadRect.这允许您指定位置和大小以及像素以外的单位。

例子:在1.2英寸的位置写一个UPC-A条码,大小等于3乘1英寸。

VB
私人共享函数InchesToPixels (按值传递矩形作为LeadRectD,按值传递dpiX作为整数按值传递dpiY作为整数作为LeadRect如果dpiX = 0然后dpiX = 96结束如果如果dpiY = 0然后dpiY = 96结束如果昏暗的像素作为var = LeadRectD.FromLTRB(矩形。左* dpiX / 96.0,矩形. top * dpiY / 96.0,矩形.右* dpiX / 96.0,矩形. bottom * dpiY / 96.0)返回pixels.ToLeadRect ()结束函数昏暗的图像作为RasterImage = RasterImage。创建(100,100,24,300,RasterColor.White)昏暗的barcodeWriter作为BarcodeWriter =没有什么昏暗的数据作为BarcodeData = BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.UPCA)数据。边界= InchesToPixels (LeadRectD(1,2,3,1),图像。XResolution,形象。YResolution)昏暗的writeOptions作为OneDBarcodeWriteOptions = TryCast(barcodeWriter.GetDefaultOptions(data. symbolic), OneDBarcodeWriteOptions)'确保X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
私人静态LeadRect InchesToPixels (LeadRectD矩形,intdpiX,intdpiY)如果(dpiX == 0) dpiX = 96;如果(dpiY = 0) dpiY = 96;var像素= LeadRectD。FromLTRB (left * dpiX / 96.0,* dpiY / 96.0,* dpiX / 96.0,* dpiY / 96.0);返回pixels.ToLeadRect ();BarcodeData data = BarcodeData. createdefaultbarcodedata (BarcodeSymbology.UPCA);数据。边界= InchesToPixels (LeadRectD(1,2,3,1),图像。XResolution,形象。YResolution);OneDBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions作为OneDBarcodeWriteOptions;//确认X模块被禁用writeOptions。UseXModule =barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条形码在1.2英寸,尺寸为3乘1英寸。

二维条形码

本节将讨论以下属性:

所有2D条形码写操作都需要一个X模块。的宽度和高度BarcodeData。界限仅用作条码的最大宽度和高度。

例子:写QR,不指定宽度和高度。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)数据。边界=LeadRect(0,0,0,0)昏暗的writeOptions作为QRBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、QRBarcodeWriteOptions)设置X模块writeOptions。XModule = 30barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;数据。边界=LeadRect(0,0,0,0);QRBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions(data. symbolic)作为QRBarcodeWriteOptions;//设置X模块writeOptions。XModule = 30;barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:从XModule计算大小的条形码(在本例中约为一英寸)。

大多数2D条形码都有严格的宽高比。例如,QR条形码必须是正方形的(具有相等的宽度和高度),因此这些值只用作条形码的最大宽度和高度,如果结果条形码的宽度或高度大于指定的值,则类型异常BarcodeException,宽度设置为BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight,将被抛出

例子:在图像上用XModule = 0.03英寸写一个QR条码,边界太小。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)数据。边界=LeadRect(0,0,10,10)昏暗的writeOptions作为QRBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、QRBarcodeWriteOptions)'使用默认XModule,它是30barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;数据。边界=LeadRect(0,0,10,10);QRBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions(data. symbolic)作为QRBarcodeWriteOptions;//使用默认的XModule,它是30barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:BarcodeException代码=BarcodeExceptionCode。InvalidWidthBarcodeExceptionCode。InvalidHeight将抛出。

所有2D条形码还支持一个对齐值,可用于控制条形码写入边界内的位置。

例子:在图像中间写一个二维码。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)“使用所有的图像数据。边界=LeadRect(0, 0,形象。ImageWidth image.ImageHeight)昏暗的writeOptions作为QRBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、QRBarcodeWriteOptions)将中间的条形码水平和垂直对齐writeOptions。HorizontalAlignment = BarcodeAlignment。中心writeOptions。VerticalAlignment = BarcodeAlignment。中心barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;//使用所有的图像数据。边界=LeadRect(0, 0,形象。ImageWidth image.ImageHeight);QRBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions(data. symbolic)作为QRBarcodeWriteOptions;//将中间的条形码水平和垂直对齐writeOptions。HorizontalAlignment = BarcodeAlignment.Center;writeOptions。VerticalAlignment = BarcodeAlignment.Center;barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:位于图像中心的条形码。

例子:在图片的右下角写上二维码。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)“使用所有的图像数据。边界=LeadRect(0, 0,形象。ImageWidth image.ImageHeight)昏暗的writeOptions作为QRBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、QRBarcodeWriteOptions)“将条形码在底部的角落对齐。writeOptions。HorizontalAlignment = BarcodeAlignment。远writeOptions。VerticalAlignment = BarcodeAlignment。远barcodeWriter。WriteBarcode(image, data, writeOptions)
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;//使用所有的图像数据。边界=LeadRect(0, 0,形象。ImageWidth image.ImageHeight);QRBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions(data. symbolic)作为QRBarcodeWriteOptions;//对齐条形码在底角writeOptions。HorizontalAlignment = BarcodeAlignment.Far;writeOptions。VerticalAlignment = BarcodeAlignment.Far;barcodeWriter。WriteBarcode(image, data, writeOptions);

结果:条码在图像的右下边缘。

PDF417和MicroPDF417条形码允许您设置“符号”的纵横比。这允许您创建任何水平和垂直大小的条形码。指PDF417BarcodeWriteOptions。XModuleAspectRatio而且MicroPDF417BarcodeWriteOptions。XModuleAspectRatio

计算条形码的尺寸

BarcodeWriter类包含CalculateBarcodeDataBounds方法,该方法允许您基于指定的选项计算条形码大小。

例子:计算X模块0.03处二维码的大小。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)“数据的价值并不重要。界限。它会被改变的昏暗的writeOptions作为QRBarcodeWriteOptions =DirectCast(barcodeWriter.GetDefaultOptions (data.Symbology)、QRBarcodeWriteOptions)设置X模块writeOptions。XModule = 30'如果写入此图像,则计算以像素为单位的大小barcodeWriter。CalculateBarcodeDataBounds (LeadRect(0, 0,形象。ImageWidth image.ImageHeight)的形象。XResolution,形象。YResolution、数据writeOptions)控制台。WriteLine ("{0} *{1}像素", data.Bounds。宽度,data.Bounds.Height)
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;//不管data的值是多少。界限。它会被改变的QRBarcodeWriteOptions writeOptions = barcodeWriter.GetDefaultOptions(data. symbolic)作为QRBarcodeWriteOptions;//设置X模块writeOptions。XModule = 30;//如果写入此图像,则计算像素大小barcodeWriter。CalculateBarcodeDataBounds (LeadRect(0, 0,形象。ImageWidth image.ImageHeight)的形象。XResolution,形象。YResolution、数据writeOptions);控制台。WriteLine ("{0} *{1}像素", data.Bounds。宽度,data.Bounds.Height);

结果:对于300 DPI的图像,结果是261 × 261像素。

计算条形码大小适用于所有条形码(1D和2D)和所有选项(带或不带X模块)。

注意,条形码大小可能包括标准定义的条形码周围的一些填充区域。

例子:为QR对象创建一个TIF文件。

VB
昏暗的数据作为QRBarcodeData =DirectCast(BarcodeData.CreateDefaultBarcodeData (BarcodeSymbology.QR)、QRBarcodeData)在整个示例中,我们将使用默认选项在300 DPI下计算条形码的像素大小昏暗的决议作为整数= 300barcodeWriter.CalculateBarcodeDataBounds (LeadRect。空,分辨率,分辨率,数据,没有什么创建一个这样大小的RasterImage对象昏暗的boundsPixels作为LeadRect = data.Bounds。ToRectangle(分辨率,分辨率)使用图像作为RasterImage (RasterMemoryFlags。传统,boundsPixels。宽度,boundsPixels。高度,1,RasterByteOrder。Rgb, RasterViewPerspective。TopLeft,没有什么, IntPtr。0, 0)设定分辨率的形象。XResolution =决议的形象。YResolution =决议“把它装满白色昏暗的cmd作为Leadtools.ImageProcessing.FillCommand (RasterColor.FromKnownColor (RasterKnownColor.White))cmd.Run(图片)将条形码写入图像barcodeWriter。WriteBarcode(image, data,没有什么保存为TIF格式使用编解码器作为RasterCodecs ()编解码器。保存(图像,“C: \ LEADTOOLS21 \资源\ \ MyQR.tif图像”RasterImageFormat.Tif 1)结束使用结束使用
c#
QRBarcodeData data = BarcodeData.CreateDefaultBarcodeData(barcodeymbology . qr)作为QRBarcodeData;//在这个例子中我们将使用默认选项//按300 DPI计算条码的像素大小int分辨率= 300;barcodeWriter.CalculateBarcodeDataBounds (LeadRect。空,分辨率,分辨率,数据,);//创建这个大小的RasterImage对象LeadRect boundsPixels = data.Bounds。ToRectangle(决议,决议);使用(RasterImage图像=RasterImage (RasterMemoryFlags。传统,boundsPixels。宽度,boundsPixels。高度,1,RasterByteOrder。Rgb, RasterViewPerspective。TopLeft,, IntPtr。0, 0))//设置分辨率的形象。XResolution =决议;的形象。YResolution =决议;//填充白色Leadtools.ImageProcessing.FillCommand (RasterColor.FromKnownColor (RasterKnownColor.White) .Run(图片);//将条形码写入图像barcodeWriter。WriteBarcode(image, data,);//保存为TIF格式使用(RasterCodecs编解码器=RasterCodecs ())编解码器。保存(图像,@“C: \ LEADTOOLS21 \资源\ \ MyQR.tif图像”RasterImageFormat.Tif 1);

结果:QR条码的TIF图像

如果需要,您可以将上面示例中的图像调整为精确的像素大小。例如,要有一个300 * 300像素的二维码,在保存图像之前添加以下代码:

VB
昏暗的cmd作为SizeCommand(300、300、RasterSizeFlags.Bicubic)cmd.Run(图片)
c#
SizeCommand cmd =SizeCommand(300、300、RasterSizeFlags.Bicubic);cmd.Run(图片);
注意:大多数条形码标准规定条形码周围必须有一个特定大小的填充区域。例如,在二维码中,这等于一个符号大小(X模块)。在编写或计算条形码的大小时,LEADTOOLS总是会添加这种填充。

LEADTOOLS成像、医疗和文档
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。