从 Rails/Ruby 中的 encoded64 代码恢复 jpeg 文件
Restore jpeg file from its encoded64 code in Rails/Ruby
我们的问题是 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
。
一个突出的问题是您解码图像然后删除 header 这会导致问题。
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
.
来确认
我们的问题是 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
。
一个突出的问题是您解码图像然后删除 header 这会导致问题。
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
.