【问题标题】:Restore jpeg file from its encoded64 code in Rails/Ruby从 Rails/Ruby 中的 encode64 代码恢复 jpeg 文件
【发布时间】:2015-11-17 17:28:17
【问题描述】:

我们的问题是uploaded_io中的Base64编码的jpeg图像文件,如何恢复jpeg文件?

编码的uploaded_io由canvas.toDataURL("image/jpeg")生成。这是uploaded_io 的样子:

uploaded_io = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2....."

在 ruby​​/rails 4 中,base64 编码文件可以使用以下代码进行解码:

require 'base64'
decoded = Base64.decode64(uploaded_io.sub(/.+,/, ''))  #removed file header 'data:image/jpeg;base64,' as suggested

我们添加了 gem mini_magick (v3.5.0) 并在我们的计算机上安装了 image magick 库。做了以下事情:

image = MiniMagick::Image.new(decoded)  

但是,image 不是 jpeg 图像文件,对.type 和.size 的响应效果不佳。无需操作图像文件,我们不确定这里是否真的需要天气mini_magick/image magick。

【问题讨论】:

  • 能否将base64解码后的值保存到扩展名为.jpg的文件中,看看能否查看?
  • 不确定如何将解码保存到文件中。是否保存解码为变量img。只有img.size 返回一个整数。 img.type 和 img.content_type 返回 undefined method 的错误。
  • 已经有人发布了关于如何将解码的字节数组保存到文件的答案。我已经独立尝试在解码后将图像文件中的 base64 部分保存到文件中,我能够在照片查看器应用程序中以 jpg 格式查看文件
  • Wand Maker,用File.open('my_img.jpeg', 'wb') {|f| f.write(img)}保存解码并查看成功。 decode64 有效。 (img 被砍头)。但是不确定为什么图像属性不可用。

标签: ruby ruby-on-rails-4 imagemagick base64


【解决方案1】:

一个突出的问题是您解码图像然后删除会导致问题的标题。

image = MiniMagick::Image(decoded.sub(/.+,/, ''))

我使用 Ruby Base64 对图像进行了简单的编码/解码测试,一切正常。

irb 示例:

require 'base64'

e = Base64.encode64(IO.read('/path/to/jpeg'))
d = Base64.decode64(e)

File.open("test.jpg", "w") { |f| f.write(d) }

test.jpg 应该是一个有效的文件。执行file test.jpg确认。

【讨论】:

  • 我们的encoded64实际上来自canvas.toDataURL("image/jpeg")。和Base64.encode64()有区别吗?
  • 有人建议在解码前删除标头。 Base64.encode64 没有按照我的理解创建该标题。
  • 刚刚验证没有砍掉头部的解码不显示并且有错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2021-08-18
  • 2016-09-11
相关资源
最近更新 更多