13

私が見たいくつかの投稿から、私はこれを試しています

x = Base64.decode64("data:image/png;base64,iVBOR....")
File.open('test.png','wb') {|file| file.write x}

しかし、ビューアーで画像を開くことができません。さらに何かする必要がありますか?

4

4 に答える 4

32

'data:image/png;base64,'問題は、プレフィックスを Base64 データとしてデコードしようとしていることです。そのプレフィックスは完全に有効な Base64 データですが、PNG ファイルの Base64 表現ではありません。その結果、あなたのtest.pngファイルには、実際にはPNGファイルであるいくつかのビットが続くナンセンスな束が含まれています. PNG をデコードする前に、データの URL プレフィックスを取り除きます。

data_url = "data:image/png;base64,iVBOR...."
png      = Base64.decode64(data_url['data:image/png;base64,'.length .. -1])
File.open('test.png', 'wb') { |f| f.write(png) }
于 2013-04-14T02:59:43.080 に答える
6

mu_is_too_short の回答はかなり近いですが、base64 ストリームに PNG データが含まれることを前提としています。これは常に当てはまるとは限らないため、正しいファイル拡張子を確立するために MIME タイプ ライブラリを使用することをお勧めします。

REGEXP = /\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/m

data_uri_parts = data_url.match(REGEXP) || []
extension = MIME::Types[data_uri_parts[1]].first.preferred_extension
file_name = "myfilename.#{extension}"

File.open(file_name, 'wb') do |file|
    file.write(Base64.decode64(data_uri_parts[2]))
end
于 2016-02-20T00:54:01.887 に答える
0

これは、base64 イメージを開く方法に関する小さなスクリプトです。vacio.txt は、base64 テキストがある場合のファイルです。

require 'base64'
entry="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQE....."
File.open("vacio.txt","r") do |fichero|
 while linea=fichero.gets
  regex=/(data:image\/\D*\d*,)/
  m=regex.match(linea)
  png=Base64.decode64(linea[m.to_s.length .. -1])
  File.open('test.jpeg','wb'){|f|f.write(png)}
 end
end 
于 2016-08-01T18:59:39.243 に答える