使用Barby条形码生成器显示Png图像

3

我正在使用Barby及其PNG输出器。我已经成功编译了它,但不确定如何显示图像。以下是代码:

控制器:

@barcode = Barby::Code128B.new(@num)
@blob = Barby::PngOutputter.new(@barcode).to_png #Raw PNG data
File.open('barcode.png', 'w'){|f| f.write @blob }

应用程序助手:
require 'barby'
require 'barby/barcode/code_128'
require 'barby/outputter/png_outputter'

视图:

<%= @blob %>
3个回答

4
您可以先生成一个png文件,然后使用像@mdemolin建议的image_tag显示该文件。
如果您有一个动态生成的图像,另一种选择是每次生成图像并发送正确的数据头。
控制器
@barcode = Barby::Code128B.new(@num)
@blob = Barby::PngOutputter.new(@barcode).to_png

respond_to do |format|
  format.html
  format.png do
    send_data @blob, type: "image/png", disposition: "inline"
  end
end

然后在视图中使用 image_tag 添加图片:

image_tag(url_for({:controller => 'barby', :action => 'show', :format => 'png' }) )

很好的解决方案,谢谢。在你的例子中,你可以直接传递一个格式:image_tag(url_for({:controller => 'barby', :action => 'show', :format => "png" }))。 - Nathan Bertram

3

由于@blob是图像数据,你不能像普通字符串一样“打印”它。相反,你需要使用image_tag,并给它提供图像的路径。类似这样:

<%= image_tag("barcode.png") %>

我遇到了“UTF-8中的无效字节序列”问题。 - user2659645
“Barby” 可能没有返回路径。如果您尝试 <%= image_tag("barcode.png") %> 呢? - mdemolin
运行得很好,但我看不到图片。它只是一个空白的正方形。 - user2659645
你确定文件 barcode.png 已经成功生成了吗?(如果你自己打开它的话) - mdemolin
是的,我明白了!问题在于我忘记在图像前面加上“/”符号。所以它可以使用“/barcode.png”。 - user2659645

1

您也可以这样做

- code = Barby::Code128B.new(string).to_png(margin:3, height: 10)
- image = Base64.encode64(code.to_s).gsub(/\s+/, "")
= image_tag "data:image/png;base64,#{Rack::Utils.escape(image)}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接