gpt4 book ai didi

ruby-on-rails - 将 base64 图像转换为用于 Carrierwave 的 StringIO

转载 作者:行者123 更新时间:2023-12-04 05:44:41 24 4
gpt4 key购买 nike

我希望有人能帮助我理解这一点。我有一个用于图像的 base64 字符串:

"data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."

我想使用 ember 的 createRecord 和 commit() 发送它:
this.get('store').createRecord(Emb.Painting, {name: newName, image: newImage});

然后我想将它转换为用于carrierwave的StringIO并保存它:
StringIO.class_eval { def original_filename; "stringiohaxx.jpg"; end }
io = StringIO.new(Base64.decode64(params[:painting][:image]))
@painting = Painting.create(:name => params[:painting][:name], :image => io )

图像被保存。图像总是损坏。我是否需要将我的 base64 字符串分解为:
data: '/9j/..'
type: 'image/jpeg'

?任何帮助表示赞赏。

最佳答案

是的,您需要拆分字符串。你可以使用这样的东西:

def splitBase64(uri)
if uri.match(%r{^data:(.*?);(.*?),(.*)$})
return {
type: $1, # "image/png"
encoder: $2, # "base64"
data: $3, # data string
extension: $1.split('/')[1] # "png"
}
end
end

然后你可以解码图像...
base64image = params[:painting][:image]
imageDataString = splitBase64(base64image)[:data]
imageDataBinary = Base64.decode64(imageDataString)

然后您可以将 imageDataBinary 传递给 StringIO.new() 并且生成的图像应该是有效的。

关于ruby-on-rails - 将 base64 图像转换为用于 Carrierwave 的 StringIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16308218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com