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 %>
4

3 回答 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' }) )
于 2015-01-27T09:27:38.410 回答
3

由于@blob是图像数据,您不能像普通字符串一样“打印”它。您需要改用image_tag,并为其提供图像的路径。就像是:

<%= image_tag("barcode.png") %>
于 2013-08-07T16:39:09.537 回答
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)}"
于 2016-02-10T09:12:23.830 回答