如何使用Barby动态创建PNG条形码?

时间:2012-01-07 15:11:20

标签: ruby heroku sinatra barcode

我需要使用Barby生成条形码png/image,然后在视图中显示图片。

我可以像Barby::Code39.new("STRING", true).to_png

一样创建条形码PNG图像

返回如下字符串:

\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x03`\x00\x00\x00x\x01\x00\x00\
\xD0Mj\x83@\x00\xC5\xF1\x92\xBB\x98\xA2\x90\xEE\xDA;\xE8\xC4,Fi\xC8\x98m\v
D\xAE\x01\xA5\xF10)^\xC2E\xF2\xDE\xFA\x0F?x\xB3\xEB\x84\x9B=L8`\xC0\x80M\x
8\xAF\x15\x0F\x997\x88\xBC-\xE7\xA9\x8C\b\xDF:u\x7F\xFEl\xD4^F\xD6\x989}[\
\xEBL\x8A\x15\x0F<oX\xAE\xDB\xEC}\xCC\xC2\xC4[\xDE\xF4\x8D\xC0\x80\x01\x03
80\x01\x03\x06\f\x180`\xC0\x80\x01\x03\x06\f\x180`\xC0\x80\x01\x03\x06\f\x
CD\xD0\xA2\xAF\xC7$\x15\x85\xC6|\xD3\xBD\x844V\xC9\xAE\xB2\xF5\xC5\x9BE64n

由于我正在使用Heroku / Sinatra,因此可以使用t = Tempfile.new("temp"); t.write ...创建文件,但是当我在视图中调用t.path时,我得到类似/tmp/qimst7的内容,当然它是404错误。

如何在视图中显示PNG图像?

1 个答案:

答案 0 :(得分:3)

我知道这是一个额外的步骤,但由于你使用Heroku,S3帐户可能不是一个坏主意。只要您将数据保持在5GB以下,并且您的请求低于20,000 /月,它就可以免费使用一年。您可以暂时将png放在那里并在一段时间后将其删除。

如果您只是动态使用它并且不想在任何地方缓存或存储它,您可以设置Content-Type标题:

headers 'Content-Type' => 'img/png'

然后直接返回该数据。但是,这需要来自不同的路线,您可以从视图中的img标记中引用该路线。