首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python条形码生成

Python条形码生成
EN

Stack Overflow用户
提问于 2013-09-24 23:42:33
回答 3查看 9.5K关注 0票数 0

我正在使用python的elaphe包来生成ean-13条形码图像。该包是使用https://pypi.python.org/pypi/elaphe中的tar文件从源代码安装的。

当我运行代码时:

代码语言:javascript
复制
BARCODE_IMAGE_PATH = "/tmp/"

def create_barcode_image(product_barcode):

    path = BARCODE_IMAGE_PATH + product_barcode + '.png'

    img = barcode('ean13', product_barcode, 
                  options=dict(includetext=True, height=0.4), margin=1)
    img.save(path, 'PNG')

    return path 

从python解释器来看,它似乎工作得很完美。正确的条形码将生成到我指定的路径。当我在apache中使用web.py作为我的web框架运行它时,我收到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  ...
     img_path = create_barcode_image(barcode)
   File "/var/www/py/documents/barcode_images.py", line 27, in create_barcode_image
     img.save(path, 'PNG')
   File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1406, in save
     self.load()
   File "/usr/local/lib/python2.7/dist-packages/PIL/EpsImagePlugin.py", line 283, in load
     self.im = Ghostscript(self.tile, self.size, self.fp)
   File "/usr/local/lib/python2.7/dist-packages/PIL/EpsImagePlugin.py", line 75, in Ghostscript
     raise IOError("gs failed (status %d)" % status)
 IOError: gs failed (status 256) 

有没有人知道可能导致这个错误的原因或者如何去调试它?

EN

回答 3

Stack Overflow用户

发布于 2013-09-25 01:11:41

添加一些调试语句,您可以遍历这些语句:

代码语言:javascript
复制
import sys

BARCODE_IMAGE_PATH = "/tmp/"

def create_barcode_image(product_barcode):

    print >> sys.stderr, "product_barcode: %s" % product_barcode

    path = BARCODE_IMAGE_PATH + product_barcode + '.png'

    print >> sys.stderr, "path: %s" % path

    img = barcode('ean13', product_barcode, 
                  options=dict(includetext=True, height=0.4), margin=1)

    print >> sys.stderr, "img data: %s" % img.tostring()

    img.save(path, 'PNG')

    print >> sys.stderr, "Saved to %s" % path

    return path 

然后在你的shell中:

代码语言:javascript
复制
$ tail -F /var/log/httpd/error.log # or wherever you put it

您正在寻找:第一:"product_barcode: ...“的输出。希望这不是空白。如果是,那么问题出在其他地方,可能是在您的服务器配置中。然后输出"img data: ...“。希望它是一个png而不是空白。如果为空,则问题出在您的ghostscript安装上。

这是一种非常基本的调试方法,我觉得对于小项目来说,插入一些调试语句比摆弄调试器要容易得多,因为调试器很难正确设置。

票数 1
EN

Stack Overflow用户

发布于 2013-09-25 15:31:46

堆栈跟踪表明barcode()返回的图像是PostScript。然后,PIL尝试运行GhostScript (gs)将图像转换为所需的输出格式PNG

如果您查看description of elaphe,您会发现它显示:

它使用BWIPP生成条形码符号作为PostScript代码片段。

您安装了GhostScript吗?

也就是说,我建议您尝试pyBarcode,因为除了PIL之外,它没有任何依赖关系。

票数 1
EN

Stack Overflow用户

发布于 2013-09-25 00:02:59

如果barcode无效,则会导致此错误。你应该首先确保它是你所期望的。例如:将其打印出来,或将其写入文件或使用调试器

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18986180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档