通过JSON数据发送图像

时间:2012-02-07 09:37:29

标签: ruby-on-rails ruby-on-rails-3 json api

noobie在这里希望你们不要介意!我试图查询我的user / id / pictures.json,但它返回的是属性cus我做了一个通用的format.json {render:json => @ photo.to_json()}。我的问题是如何创建和封装图像中的实际数据,以便我的客户可以将数据转换为图像?除了图像路径之外我还需要创建什么(属性明智)(比如你只有无用的属性,例如:height content_type,description,thumbnail file_name)?

这是我到目前为止在我的index.json.erb中尝试的内容

}
  <% @photos.each do |photo|%>
   data: <%= StringIO.new(Base64.encode64(photo.public_filename(:large))) %>
  <%end%>
}

我要回来了

{
 data: #<StringIO:0x1058a6cd0>

}

这不是我正在寻找的IMGdata 寻找

2 个答案:

答案 0 :(得分:9)

看看Data-URIs。 它们基本上是格式化为URI的Base64编码实体(文档)

[{ "name":"red dot", "data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="}, ...]

<强> [UPDATE]

您需要读取文件并将其编码为Base64(您还需要在rails 2.3.x中删除新行)

data = ActiveSupport::Base64.encode64(File.read("/images/image1.png")).gsub("\n", '')
uri  = "data:image/png;base64,#{data}"

答案 1 :(得分:1)

我认为您使用的是Ruby on Rails,不是吗?

然后下载图像需要一些步骤(例如png):

创建mime类型

转到config/initializers/mime_types.rb并在结尾插入Mime::Type.register "image/png", :png

创建图片

例如,您可以使用gem Chunky_PNG创建图片,请参阅http://rubygems.org/gems/chunky_pnghttps://github.com/wvanbergen/chunky_png/wiki

准备控制器

你必须告诉你的控制器,它可以接受png。按以下方式修改控制器

class UsersController < ApplicationController
  respond_to :json, :png

    def show
        # your own stuff
        # ...

        respond_with(response) do |format|
          format.json
          format.png do
            send_data ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT), :type =>"image/png", :disposition => 'inline'
          end
        end
    end
end

这将创建一个完全透明的图像。如果你想在此绘制一些内容,请查看Chunky PNG文档。