从Prawn :: Document的字符串到图像的Base64解码,路径名包含空字节错误

时间:2018-08-23 13:11:11

标签: javascript ruby string base64

我在javascript中有图像的base64编码字符串:

var theString64 = 'data:image/png;base64,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'

我尝试在Ruby中执行以下操作,以使用Prawn::Document#image来创建包含对虾库中包含的图像的文档:

theImage = Base64.decode64(theString64)
image theImage, at: [215, 195]

并收到错误消息:pathname contains null byte

我需要解析这个问题还是有其他问题?我看不到字符串中有任何空字符。

我尝试过

.gsub(%r{\u0000}, "")

它没有帮助。

2 个答案:

答案 0 :(得分:1)

首先应该刮掉origin=date_offset部分。

'data:image/png;base64'

Vermietet / Leer

答案 1 :(得分:0)

我已经找到了错误的原因,并在相同情况下将其包括给其他人,我在发送代码并在Ruby端进行解码之前使用javascript进行了编码,但是该图像没有缓冲区,因此要使此工作有效,您需要包括StringIO:

require 'base64'
require 'stringio'

theImage = StringIO.new(Base64.decode64(theString64.split(',', 2).last))

然后...

image theImage, at: [215, 195]