确定一维条码条宽补偿量的方法和系统、条码打印方法
技术领域
本发明属于一维条码技术领域,具体涉及一种确定条码条宽
补偿量的方法和系统、条码打印方法。
背景技术
随着技术的发展,条码(又称条形码)在商品流通、图书管理、邮政管理、银行系统等领域的应用越来越多。在各种条码中,一维条码因其简单易用获得了最广泛的应用。一维条码由一组间隔排列的、平行的、低反射率的矩形条组成;这些低反射率的条(如为黑色)称为“条”,而各条之间的高反射率空隙部分(如为白色)称为“空”。一维条码中条和空的宽度以“模块宽度”为单位,即所有条和空的宽度都为模块宽度的整数倍(1倍、2倍、3倍等),按照一定的编码规则将特定宽度的条和空排列组合即可表达所需信息。
一维条码是通过将条打印在承载物(如纸)上形成的,各条间的空隙自然形成空。由于打印设备精度、油墨扩散、承载物材质等原因,故在将一维条码打印到承载物上时,打印出的条的实际宽度(即在承载物上实际形成的条的宽度)必定大于向打印设备输出的希望其打印的宽度值,即必定存在“条宽增加”现象,随着条宽度的增大,其条宽增加量也逐渐增大,但增大速度逐渐减慢,其具体值与打印设备、油墨、承载物等许多因素有关。显然,条宽增加现象会导致条的宽度变大,同时导致其相邻空的宽度变小,引起条码宽度的不准确,降低条码质量,引发条码识别错误。
为了避免上述识别错误,提高条码打印质量,现有技术在打印一维条码时会特意增大模块宽度(也就是按比例同步增大一维条码中条和空的宽度),由于条的宽度越大其宽度增加量相对于条宽度所占的比例就越小,故条宽增加量对条码识别的影响也越小。或者,也可使用条宽补偿量来减小条宽增加的影响,即在要打印一定宽度的条时,不向打印设备直接输入所需的条宽度,而要求其打印“所需的条宽度减去条宽补偿量”的值,即使“指令的打印宽度=实际所需宽度-条宽补偿量”,这样打印的条在经过条宽增加后变得接近所需宽度;当然,此时只是向打印设备输出的要求其打印的条的宽度有变化,但条的位置(中心线位置)以及空的宽度和位置均不变。
发明人发现现有技术中至少存在如下问题:对于增大模块宽度的方法,其虽能减少一维条码的识别错误,但也会造成一维条码整体宽度增加,从而造成材料浪费和打印成本提高,甚至可能使一维条码过宽而超出承载物上的预订区域并无法被识别。对于使用条宽补偿量的方法,由于条宽增加量与打印设备、油墨、承载物等多种因素相关,变化规律复杂,无法被准确预测,且其绝对值很小,难以被准确测定,故该条宽补偿量只能是用户估算的值,并不准确,因此其很可能无法达到补偿条宽增加量的作用,甚至可能导致实际打印出的条宽度过小,反而引发新的识别错误。
发明内容
本发明所要解决的技术问题包括,针对现有技术中一维条码宽度过大或容易被错误识别的问题,提供一种简便、准确的确定一维条码条宽补偿量的方法。
解决本发明技术问题所采用的技术方案是一种确定一维条码条宽补偿量的方法,包括确定k倍模块宽度的条宽补偿量yk的步骤,其中k为正整数,所述确定yk的步骤包括:
确定以打印象素个数为单位的模块宽度n以及k倍模块宽度的宽度kn;
用打印设备在承载物上打印k倍模块宽度的测试靶,每个所述测试靶包括至少两个条和一个空,且以打印象素个数为单位的条宽度ak与空宽度bk满足:ak<kn时ak+bk=kn,ak=kn时bk=1;
通过判断所述测试靶中的相邻条是否接触找出k倍模块宽度的临界测试靶,所述临界测试靶为相邻条不接触的、条宽度值ak最大的测试靶;
根据公式yk=(kn-ak’)确定yk,其中ak’为所述临界测试靶的条宽度。
其中,打印象素是指打印设备所能打印的最小的点,是打印设备的最基本的打印单位,其直径等于打印设备分辨率的倒数;以打印象素个数为单位的各种宽度(n、ak、bk、yk等)是指该宽度等于多少个打印象素相连的尺寸,因此n、ak、bk、yk等显然均应为正整数。k倍模块宽度是指宽度等于k个模块宽度的条,根据一维条码的编码方法可知,k必然为正整数,且其最大值由具体条码编码规则中规定的最大条宽决定。
本发明的方法中,k倍模块宽度的临界测试靶的相邻条不接触但宽度最大(或者说空宽度最小),即条的实际宽度(打印并发生条宽增加后的宽度)最接近k倍模块宽度kn,因此根据yk=(kn-ak’)求出的条宽补偿量yk准确性高,使用该条宽补偿量进行打印可准确得到所需宽度的条,提高条码质量;而且,本发明的方法不必使用任何专业的测量仪器,只凭肉眼观察即可得到准确的条宽补偿量,方便快捷,效率高,成本低;另外,本发明的方法不必特意增大模块宽度,故打印出的一维条码的整体宽度较小,打印成本、材料耗费均低,承载物上所需的预订区域也小,使用方便。
优选的是,所述确定模块宽度n包括:根据公式n=ceil(S/D)确定模块宽度n,其中ceil为上取整函数,S为条码识别设备所能识别的最细的条宽度,D为打印设备的打印象素的直径。
优选的是,每个所述测试靶中包括至少四个条和三个空。
优选的是,所述测试靶中的条的长度至少为10毫米。
优选的是,当k≥2时,所述k倍模块宽度的测试靶中的空宽度bk满足:yk-1≤bk≤(yk-1+y1),其中yk-1为(k-1)倍模块宽度的条宽补偿量。
优选的是,所述用打印设备在承载物上打印k倍模块宽度的测试靶包括:用打印设备在承载物上打印条宽度ak所允许取值范围内的全部的k倍模块宽度的测试靶。
优选的是,所述判断所述测试靶中的相邻条是否接触具体为:若所述测试靶中任意相邻条的任意部分均不接触,则判断该测试靶中的相邻条不接触;若所述测试靶中有至少两个相邻条至少存在部分接触,则判断该测试靶中的相邻条接触。
优选的是,所述k≤4。
本发明所要解决的技术问题包括,针对现有技术中一维条码宽度过大或容易被错误识别的问题,提供一种宽度较小且不易被识别错误的打印一维条码的方法。
解决本发明技术问题所采用的技术方案是一种打印一维条码的方法,包括:
以上述方法确定k倍模块宽度的条宽补偿量yk;
用所述打印设备在所述承载物上打印一维条码条,其中在要形成k倍模块宽度时,则用所述打印设备打印宽度为(kn-yk)的条。
由于本发明的打印一维条码的方法中使用上述方法确定条宽补偿量,故其确定条宽补偿量的过程方便快捷,所得的条宽补偿量准确,所打印的条码质量好,被错误识别的可能性低,且整体宽度较小,成本低,使用方便。
本发明所要解决的技术问题包括,针对现有技术中一维条码宽度过大或容易被错误识别的问题,提供一种简便、准确的确定一维条码条宽补偿量的系统。
解决本发明技术问题所采用的技术方案是一种确定一维条码条宽补偿量的系统,包括:
宽度确定单元,用于确定以打印象素个数为单位的模块宽度n以及k倍模块宽度的宽度kn,其中k为正整数;
打印设备驱动单元,用于驱动打印设备在承载物上打印k倍模块宽度的测试靶,每个所述测试靶包括至少两个条和一个空,且以打印象素个数为单位的条宽度ak与空宽度bk满足:ak<kn时ak+bk=kn,ak=kn时bk=1;
条宽补偿量确定单元,用于根据用户确定的临界测试靶按照公式yk=(kn-ak’)计算k倍模块宽度的条宽补偿量yk,其中临界测试靶为相邻条不接触的、条宽度值最大的测试靶,而ak’为所述临界测试靶的条宽度。
由于本发明的确定一维条码条宽补偿量的系统可使用上述方法确定条宽补偿量,因此其确定条宽补偿量的过程方便快捷,所得的条宽补偿量准确,根据其打印出的条码质量好,被错误识别的可能性低,且整体宽度较小,成本低,使用方便。
本发明特别适用于打印一维条码,如128位条码等。
附图说明
图1为本发明的实施例2的确定一维条码条宽补偿量的方法中打印的1倍模块宽度的测试靶的结构示意图。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明作进一步详细描述。
实施例1:
本实施例提供一种确定一维条码条宽补偿量的方法,包括确定k倍模块宽度的条宽补偿量yk的步骤,其中k为正整数,确定yk的步骤包括:
确定以打印象素个数为单位的模块宽度n以及k倍模块宽度的宽度kn;
用打印设备在承载物上打印k倍模块宽度的测试靶,每个测试靶包括至少两个条和一个空,且以打印象素个数为单位的条宽度ak与空宽度bk满足:ak<kn时ak+bk=kn,ak=kn时bk=1;
通过判断测试靶中的相邻条是否接触找出k倍模块宽度的临界测试靶,临界测试靶为相邻条不接触的、条宽度值ak最大的测试靶;
根据公式yk=(kn-ak’)确定yk,其中ak’为临界测试靶的条宽度。
本实施例的方法中,k倍模块宽度的临界测试靶的相邻条不接触但宽度最大(或者说空宽度最小),即其实际宽度(打印并发生条宽增加后的宽度)最接近k倍模块宽度kn,因此根据yk=(kn-ak’)求出的条宽补偿量yk准确性高,使用该条宽补偿量进行打印可准确得到所需宽度的条,提高条码质量;而且,本发明的方法不必使用任何专业的测量仪器,只凭肉眼观察即可得到准确的条宽补偿量,方便快捷,效率高,成本低;另外,本发明的方法不必特意增大模块宽度,故打印出的一维条码的整体宽度较小,打印成本、材料耗费均低,承载物上所需的预订区域也小,使用方便。
实施例2:
本实施例提供一种确定一维条码条宽补偿量的方法,其包括确定k倍模块宽度的条宽补偿量yk的步骤,k为正整数。
本方法具体包括以下步骤:
S01、令k=1,即先确定1倍模块宽度的条宽补偿量y1,其具体包括:
S011、确定模块宽度n,并据此确定k倍模块宽度的宽度kn,而1倍模块宽度的宽度也为n。其中n以打印象素个数为单位(因此其显然为正整数),打印象素为打印设备所能打印的最小的点,模块宽度为n即表示模块宽度等于n个打印象素相连的尺寸。
优选的,模块宽度n可通过公式n=ceil(S/D)确定,其中ceil为上取整函数,S为条码识别设备所能识别的最细的条宽度(以厘米、英寸等为单位),D为打印设备的打印象素的直径(以厘米、英寸等为单位)。其中,S可为条码识别设备标称的测量孔径值Sx,也可为用户根据使用经验估算的条码识别设备的最小识别能力值;而D则可为打印设备分辨率(以点/英寸或点/厘米为单位)的倒数,即打印设备所能打印的最小点的直径。上述公式求出的模块宽度n就是以打印象素个数表示的条码识别设备所能识别的条宽度的下限值;因此根据这种方法求出的模块宽度为理论上的最小值,根据其打印的一维条码整体宽度也最小,成本最低,材料消耗最少,使用最方便。
当然,模块宽度n也可用其它的方法确定,例如根据用户的经验估算等。而且,若确定的模块宽度n不合适(例如根据该n无法得到合理的条宽补偿量),则重新给出更大的模块宽度n即可。
S012、用打印设备在承载物上打印1倍模块宽度的测试靶,每个测试靶包括至少两个条和一个空,优选则如图1所示包括至少四个条和三个空(图1以四个条和三个空为例),且优选每个条的长度至少为10mm。由于承载物、油墨、打印设备运行等都不可能达到完全均匀,因此打印的同样宽度的条在不同位置的实际的宽度增加量并不完全相等,故打印较多的条并限定条长度的最小值可减小承载物、油墨等不均匀性的影响,准确的判断相邻条是否接触;之所以选定测试靶至少包括四个条,每条长度至少为10mm,是因为根据实践经验,这个数量和长度的条已经能较好的消除不均匀因素的影响,而同时测试靶又不会太大。
在每个测试靶中,所有的条宽度相等,所有的空宽度也相等,且以打印象素个数为单位的条宽度ak与空宽度bk满足:ak<kn时ak+bk=kn,ak=kn时bk=1,由于ak、bk是以打印象素个数为单位的,它们显然也均为正整数。此时k=1,因此对1倍模块宽度的测试靶,其条宽度a1与空宽度b1满足:a1<n时a1+b1=n,a1=n时b1=1,其a1、b1取值可如下表1所示。显然,不同的测试靶应隔开一定的距离(例如横向间隔10mm),以免相互影响,且不同测试靶的a1值也应不同。
表1:1倍模块宽度的测试靶的条和空的宽度值
测试靶编号 |
a1(打印象素个数) |
b1(打印象素个数) |
1 |
1 |
n-1 |
2 |
2 |
n-2 |
…… |
…… |
…… |
n-2 |
n-2 |
2 |
n-1 |
n-1 |
1 |
n |
n |
1 |
优选的,本打印步骤可为用打印设备在承载物上打印条宽度ak取值范围内的全部的k倍模块宽度的测试靶;也就是打印a1为1、2、3……n的共n个测试靶,这样一次将全部的测试靶打出可以保证必然能够找到临界测试靶,从而减少可能的打印次数,提高效率。
当然,具体的打印测试靶的方法是多样的,例如也可根据用户估算的临界测试靶的最可能的条宽度先打印部分测试靶,如果临界测试靶不在其中再继续打印其它测试靶;或者,也可先打印某个测试靶,再根据该测试靶的条是否相邻选择下一步应该打印什么样的测试靶。
S013、通过判断测试靶中的相邻条是否接触找出k倍模块宽度的临界测试靶。其中,临界测试靶为相邻条不接触的、条宽度值ak最大的测试靶;或者说,临界测试靶是在所有测试靶中相邻条不接触但间距最小的测试靶。
优选的,上述判断测试靶中的相邻条是否接触的过程可按以下规则进行:若测试靶中任意相邻条的任意部分均不接触(即所有的相邻条都完全无任何接触),则判断该测试靶中的相邻条不接触;而若测试靶中有至少两个相邻条至少存在部分接触(即相邻条存在任何一点接触,如图1中a1=5的测试靶所示),则判断该测试靶中的相邻条接触。按照这种判断方式求出的条宽补偿量可靠性最高。以图1为例,按上述方法判断,其中a1=1、2、3、4的测试靶的相邻条均不接触,而a1=5的测试靶的相邻条则接触。当然,图1中的测试靶只是示例性的,其具体宽度、长度、长宽比、数量等都不一定为实际值。
当然,使用其它的标准判断判断相邻条是否接触也是可行的;比如,可在一个测试靶中的相邻条虽有接触但发生接触的部分的很少时(如少于条总长度的5%)也判定该测试靶中的条不接触。
其中,对临界测试靶的判断可按以下规则进行:若条宽度为m的测试靶的相邻条不接触,而条宽度为(m+1)的测试靶的相邻条接触,则以条宽度为m的测试靶为临界测试靶,其中m以打印象素个数为单位,且m<kn;而若条宽度为kn的测试靶相邻条不接触,则以该测试靶为临界测试靶(此时条宽补偿量为0)。以图1为例,按上述方法判断,条宽度为4的测试靶的相邻条不接触,而条宽度为5的测试靶的相邻条接触,故a1=4的测试靶即为临界测试靶。
显然,判断相邻条是否接触的工作只凭肉眼即可准确实现(最多需要借助放大镜),而不必使用专业的仪器,因此本实施例的方法可方便快捷的确定出条宽补偿量。
S014、根据公式yk=(kn-ak’)确定k倍模块宽度的条宽补偿量yk,其中ak’为临界测试靶的条宽度;此时k=1,因此1倍模块宽度的条宽补偿量y1=(n-a1’)。
显然,使用打印设备将测试靶在承载物上打印出来后,其中的条必然发生条宽增加,且条宽增加量与具体的打印设备、承载物等因素相关;对于临界测试靶,其实际条宽度(即打印并发生条宽增加后的宽度)最接近kn但又肯定不到(kn+1)。因此,根据临界测试靶的条宽度ak’计算出的条宽补偿量yk准确性很高,根据该条宽补偿量打印一维条码可使实际的条宽度很接近所需值,从而提高条码质量,减少识别错误;同时,由于不用特意增大模块宽度,故其打印出的一维条码整体宽度较低,成本较低,材料消耗较少,用于设置条码的区域可较小,使用方便。
S02、令k=2,即确定2倍模块宽度的条宽补偿量y2,其具体包括:
S021、确定模块宽度n以及2倍模块宽度的宽度2n;其中n已在步骤S011中确定,故直接算出2n即可。
S012、用打印设备在承载物上打印2倍模块宽度的测试靶,每个测试靶包括至少两个条和一个空(优选包括至少四个条和三个空,且优选每个条的长度至少为10mm)。每个测试靶中所有的条宽度相等,所有的空宽度也相等,且以打印象素个数为单位的条宽度a2与空宽度b2满足:a2<2n时a2+b2=2n,a2=2n时b2=1。
优选的,当k≥2时,k倍模块宽度的测试靶中的空宽度bk的范围可被进一步限定为:yk-1≤bk≤(yk-1+y1),其中yk-1为(k-1)倍模块宽度的条宽补偿量。在k=2时,则满足y1≤bk≤2y1;因此2倍模块宽度的测试靶的a2、b2取值可如下表2所示。
表2:2倍模块宽度的测试靶的条和空的宽度值
测试靶编号 |
a2(打印象素个数) |
b2(打印象素个数) |
1 |
2n-2y1 |
2y1 |
2 |
2n-2y1+1 |
2y1-1 |
3 |
2n-2y1+2 |
2y1-2 |
…… |
…… |
…… |
y1-1 |
2n-y1-2 |
y1+2 |
y1 |
2n-y1-1 |
y1+1 |
y1+1 |
2n-y1 |
y1 |
如前所述,随着条宽度的增大,其宽度增加量也会增大但增大速度逐渐减慢,因此k倍模块宽度的条宽补偿量必定大于等于(k-1)倍模块宽度的条宽补偿量,但小于等于(k-1)倍模块宽度的条宽补偿量加上1倍模块宽度的条宽补偿量;故可进一步限定测试靶中空宽度bk,当然,由于ak、bk满足特定关系,故条宽度ak实际也被进一步限定了。由于ak、bk的取值范围被进一步限定,故测试靶的数量也减少了,由此可减少确定k倍模块宽度的条宽补偿量yk(k≥2)时所需打印的测试靶的量,以提高效率,降低成本。
S023、通过判断测试靶中的相邻条是否接触找出临界测试靶;其具体判断方法与S013步骤相同,故在此不再详细叙述。
S024、根据公式y2=(2n-a2’)确定2倍模块宽度的条宽补偿量y2,其中a2’为临界测试靶的条宽度。
S03、令k=3,确定3倍模块宽度的条宽补偿量y3。
S04、令k=4,确定4倍模块宽度的条宽补偿量y4。
上述S03、S04步骤的具体过程与S02步骤类似,只是其中各公式内的k值变化,故在此就不再详细叙述。
优选的,k≤4,也就是如本实施例所示,只计算1至4倍模块宽度的条宽补偿量。如前所述,条的宽度越大则其宽度增加量占总宽度的比例就越小,宽度增加量对条码识别的影响也越小,根据实践经验,对于宽度超过4倍模块宽度的条,其条宽度增加量就基本不会对一维条码识别造成影响了,因此也就没有必要确定其对应的条宽补偿量。当然,k的取值范围也可根据打印设备、承载物等的具体情况确定。
当然,上述确定不同倍模块宽度的条宽补偿量的步骤的顺序可以变化,例如可先确定y4再确定y1。但如前所述,k≥2时要进一步限定ak、bk的范围时需要用到y1和yk-1,因此优选可按照本实施例的方法先令k=1以确定y1,之后逐渐增大k并依次求出相应的yk。
实施例3:
本实施例提供一种打印一维条码的方法,其包括以下步骤:
以上述方法确定k倍模块宽度的条宽补偿量yk;
用打印设备在承载物上打印一维条码条,其中在要形成k倍模块宽度时,则用打印设备打印宽度为(kn-yk)的条。
也就是说,假设n=5,k=2,y2=2,则2倍模块宽度的所需宽度为2*5=10个打印象素,此时若要打印2倍模块宽度,则指令打印设备在该条的位置打印宽度为:(2n-y2)=(2*5-2)=8个打印象素的条,在经过条宽增加后,即得到宽度最接近10个打印象素的条。
当然,对于没有相应条宽补偿量的条(比如5倍模块宽度的条),则直接打印所需宽度的条即可;同时,所有的空的宽度也均不必变化。
由于本实施例的打印一维条码的方法中使用上述方法确定条宽补偿量,故其确定条宽补偿量的过程方便快捷,所得的条宽补偿量准确,所打印的条码质量好,被错误识别的可能性低,且整体宽度较小,成本低,使用方便。
实施例4:
本实施例提供一种确定一维条码条宽补偿量的系统,包括:
宽度确定单元,用于确定以打印象素个数为单位的模块宽度n以及k倍模块宽度的宽度kn,其中k为正整数;
打印设备驱动单元,用于驱动打印设备在承载物上打印k倍模块宽度的测试靶,每个测试靶包括至少两个条和一个空,且以打印象素个数为单位的条宽度ak与空宽度bk满足:ak<kn时ak+bk=kn,ak=kn时bk=1;
条宽补偿量确定单元,用于根据用户确定的临界测试靶按照公式yk=(kn-ak’)计算k倍模块宽度的条宽补偿量yk,其中临界测试靶为相邻条不接触的、条宽度值最大的测试靶,而ak’为临界测试靶的条宽度。
当然,本实施例的确定一维条码条宽补偿量的系统中的各个单元可以是分别的独立单元,也可集成为一体(如集成为一个处理器);且本实施例的确定一维条码条宽补偿量的系统中还可包括其它公知的结构,比如输入单元,其用于获取用户输入的条码识别设备的测量孔径值、打印设备分辨率、临界测试靶编号等,以用这些值进行上述运算过程。
由于本实施例的确定一维条码条宽补偿量的系统可使用上述方法确定条宽补偿量,因此其确定条宽补偿量的过程方便快捷,所得的条宽补偿量准确,根据其打印出的条码质量好,被错误识别的可能性低,且整体宽度较小,成本低,使用方便。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。