ruby-on-rails – 将base64图像转换为Carrierwave的StringIO
发布时间:2020-12-17 03:31:11 所属栏目:百科 来源:网络整理
导读:我希望有人可以帮助我理解这一点.我有一个图像的base64字符串: "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." 我想使用ember的createRecord和commit()发送它: this.get('store').createRecord(Emb.Painting,{name: newName,image: newImage}); 然后我想
我希望有人可以帮助我理解这一点.我有一个图像的base64字符串:
"data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." 我想使用ember的createRecord和commit()发送它: this.get('store').createRecord(Emb.Painting,{name: newName,image: newImage}); 然后我想将它转换为StringIO for carrierwave并保存它: 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(),结果图像应该是有效的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |