条码图像生成方法和装置
技术领域
本发明涉及数字排版领域,具体而言,涉及条码图像生成方法和装置。
背景技术
条形码或称条码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到了广泛的应用。
为了生成条码图像,需要打印条和空,条的宽度和空的宽度均是最小模块宽度的整数倍。
相关技术提供的一种方案要求用户设置条码图像的最小模块宽度,然后编辑器根据用户设置的最小模块宽度连续生成多个条和空。由于最小模块宽度必须是像素宽度的整数倍,所以这样得到的条码图像宽度也必须是像素的整数倍,这有可能不能满足用户对条码图像宽度的要求。例如用户期望打印整体宽度为100的条码图像,条码图像包括10个条和空。然而像素宽度是1.5,所以用户只能将最小模块宽度设置为9。那么生成10个最小模块宽度的宽的条和空之后,总计为90宽,这不能满足用户对条码图像宽度的要求。
相关技术提供的另一种方案要求用户设置条码图像的整体宽度,然后编辑器根据条码规范的要求,通过条码宽度计算最小模块宽度。
由于最小模块宽度必须是像素宽度的整数倍,所以在实际打印时,必须缩小计算得到的最小模块宽度至像素的整数倍。以调整后的最小模块宽度连续生成多个条和空后,将会与预设的条码图像宽度相差多个像素。相关技术将该多余的部分填充为白色,并设置在条码图像的尾部。因此,相关技术的条码图像由于包含较多的空白,存在较大的误差。
例如,用户设置一个条码图像的整体宽度为100,编辑器根据条码规范的要求(要生成10个条和空)计算得到最小模块宽度为10。然而像素宽度是1.5,所以将最小模块宽度调整为9。那么生成10个最小模块宽度的宽的条和空之后,总计为90宽,剩余的10个像素将填充为白色,设置在条码图像的尾部,这造成了较大的误差。
发明内容
本发明旨在提供一种条码图像生成方法和装置,以解决相关技术生成的条码图像误差较大的问题。
在本发明的实施例中,提供了一种条码图像生成方法,包括:设置关于期望的条码图像的宽度的参数;根据参数确定最小模块宽度、以及利用最小模块宽度生成的条码图像的整体宽度与期望的条码图像的整体宽度之间的像素差;利用最小模块宽度生成条码图像,并将像素差均匀地分布到条码图像的各个条和空中;其中,将像素差均匀地分布到条码图像的各个条和空中包括:如果像素差为1个像素,则放在最后一个空;如果像素差为2个像素,则放在第一个条和最后一个空;如果像素差为3个像素,则放在第一个条、第二个条和最后一个空;如果像素差为4个像素,则放在第1、2、3条和最后一个空;如果像素差为5个像素,则放在第1、2、3条、第1空和最后一个空。
在本发明的实施例中,提供了一种条码图像生成装置,包括:设置模块,用于设置关于期望的条码图像的宽度的参数;像素差模块,用于根据参数确定最小模块宽度、以及利用最小模块宽度生成的条码图像的整体宽度与期望的条码图像的整体宽度之间的像素差;分布模块,用于利用最小模块宽度生成条码图像,并将像素差均匀地分布到条码图像的各个条和空中;其中,分布模块具体用于:如果像素差为1个像素,则放在最后一个空;如果像素差为2个像素,则放在第一个条和最后一个空;如果像素差为3个像素,则放在第一个条、第二个条和最后一个空;如果像素差为4个像素,则放在第1、2、3条和最后一个空;如果像素差为5个像素,则放在第1、2、3条、第1空和最后一个空。
本发明上述实施例的条码图像生成方法和装置因为将像素差均匀地分布到条码图像的各个条和空中,所以克服了相关技术生成的条码图像误差较大的问题,提高了条码图像的精度,满足了实际生产的需要。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了根据本发明实施例的条码图像生成方法的流程图;
图2示出了根据本发明实施例的条码图像生成装置的示意图。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
图1示出了根据本发明实施例的条码图像生成方法的流程图,包括:
步骤S10,设置关于期望的条码图像的宽度的参数,例如可以提供一个可编辑界面,用户可以在界面中进行上述参数的设置;
步骤S20,根据参数确定最小模块宽度、以及利用最小模块宽度生成的条码图像的整体宽度与期望的条码图像的整体宽度之间的像素差;
步骤S30,利用最小模块宽度生成条码图像,并将像素差均匀地分布到条码图像的各个条和空中。
相关技术将多余的像素都累积到条码图像的尾部,因此造成了较大的误差。而本实施例中将像素差均匀地分布到条码图像的各个条和空中,所以克服了相关技术生成的条码图像误差较大的问题,提高了条码图像的精度,满足了实际生产的需要。
优选地,参数为最小模块宽度参数,步骤S20包括:
确定最小模块宽度的值为像素整数倍、不大于最小模块宽度参数、且最接近最小模块宽度参数的值;
确定像素差=(最小模块宽度参数-最小模块宽度)×条码图像的条和空的最小模块总数。
本优选实施例实现了通过最小模块宽度参数来确定像素差,从而用户在条码图像的软件生成界面中仅需输入最小模块宽度参数,就可以生成高精度的条码图像。
优选地,参数为整体宽度参数,步骤S20包括:
确定理想最小模块宽度=整体宽度参数/条码图像的条和空的最小模块总数;
确定最小模块宽度的值为像素整数倍、不大于理想最小模块宽度、且最接近理想最小模块宽度的值;
确定像素差=整体宽度参数-最小模块宽度×条码图像的条和空的最小模块总数。
本优选实施例实现了通过整体宽度参数来确定像素差,从而用户在条码图像的软件生成界面中仅需输入整体宽度参数,就可以生成高精度的条码图像。
上述两个优选实施例能够利用计算机自动计算相关参数,应用起来非常方便,特别是在标签的排版的工作过程中,输入相关的参数,计算机自动就计算好了,避免了现有技术的误差问题,从而提高了精度,满足了实际生产的需要。
优选地,所述条码图像为128码,步骤S30包括:
如果像素差为1个像素,则放在最后一个空;
如果像素差为2个像素,则放在第一个条和最后一个空;
如果像素差为3个像素,则放在第一个条、第二个条和最后一个空;
如果像素差为4个像素,则放在第1、2、3条和最后一个空;
如果像素差为5个像素,则放在第1、2、3条、第1空和最后一个空。
本优选实施例给出了一种平均分布的方法,显然本发明并不限定于此,还可以通过其他比较简单容易实现的方法来实现多余像素的平均分布,例如多余像素先放在第1空,然后最后1条,等等。
优选地,还包括:将生成的条码图像嵌入到PDF文件中。利用PDF文件可以很容易地实现印刷等后续处理。
图2示出了根据本发明实施例的条码图像生成装置的示意图,包括:
设置模块10,用于设置关于期望的条码图像的宽度的参数,例如可以提供一个可编辑界面,用户可以在界面中进行上述参数的设置;
像素差模块20,用于根据参数确定最小模块宽度、以及利用最小模块宽度生成的条码图像的整体宽度与期望的条码图像的整体宽度之间的像素差;
分布模块30,用于利用最小模块宽度生成条码图像,并将像素差均匀地分布到条码图像的各个条和空中。
本实施例提高了条码图像的精度,满足了实际生产的需要。
优选地,参数为最小模块宽度参数,像素差模块20包括:
最小模块宽度模块,用于确定最小模块宽度的值为像素整数倍、不大于最小模块宽度参数、且最接近最小模块宽度参数的值;
设置模块,用于确定像素差=(最小模块宽度参数-最小模块宽度)×条码图像的条和空的最小模块总数。
本优选实施例使得用户在条码图像的软件生成界面中仅需输入最小模块宽度参数,就可以生成高精度的条码图像。
优选地,参数为整体宽度参数,像素差模块20包括:
理想模块,用于确定理想最小模块宽度=整体宽度参数/条码图像的条和空的最小模块总数;
最小模块宽度模块,用于确定最小模块宽度的值为像素整数倍、不大于理想最小模块宽度、且最接近理想最小模块宽度的值;
设置模块,用于确定像素差=整体宽度参数-最小模块宽度×条码图像的条和空的最小模块总数。
本优选实施例使得用户在条码图像的软件生成界面中仅需输入整体宽度参数,就可以生成高精度的条码图像。
优选地,所述条码图像为128码,分布模块用于如果像素差为1个像素,则放在最后一个空;如果像素差为2个像素,则放在第一个条和最后一个空;如果像素差为3个像素,则放在第一个条、第二个条和最后一个空;如果像素差为4个像素,则放在第1、2、3条和最后一个空;如果像素差为5个像素,则放在第1、2、3条、第1空和最后一个空。本优选实施例简单容易实现。
优选地,还包括:输出模块,用于将生成的条码图像嵌入到PDF文件中。利用PDF文件可以很容易地实现印刷等后续处理。
从以上的描述中可以看出,本发明上述的实施例可以提高条码图像的精确性,减少误差,从而满足实际需要。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。