簡體   English   中英

將base64圖像轉換為Carrierwave的StringIO

[英]Convert base64 image to StringIO for Carrierwave

我希望有人能幫助我理解這一點。 我有一個圖像的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(),結果圖像應該是有效的。

是的,字符串確實需要分解:

var data = newImage.split(',');  
this.get('store').createRecord(Emb.Painting, {name: newName, image: data[1]});  

我懷疑這是最好的方式......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM