加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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(),结果图像应该是有效的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读