How to save a base64 string as an image using ruby How to save a base64 string as an image using ruby ruby ruby

How to save a base64 string as an image using ruby


When writing binary data to a file, such as is the case with an image, you cannot use text printing tools like IO#puts.

There's two things you need to ensure:

  • You need to be writing in binary mode to avoid any possible LF to CRLF expansion.
  • You must use write instead of puts as write can work on arbitrary data, but puts (literally "put string") is exclusively for text.

Combining these you get:

File.open('shipping_label.gif', 'wb') do |f|  f.write(Base64.decode64(base_64_encoded_data))end


Other answers are pretty close, but usually assume that base64 stream will contain PNG data. This is not always the case so I suggest to use mime types library to establish correct file extension:

REGEXP = /\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/mdata_uri_parts = data_url.match(REGEXP) || []extension = MIME::Types[data_uri_parts[1]].first.preferred_extensionfile_name = "myfilename.#{extension}"File.open(file_name, 'wb') do |file|    file.write(Base64.decode64(data_uri_parts[2]))end


require 'RMagick'data = params[:image_text]# code like this  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABPUAAAI9CAYAAABSTE0XAAAgAElEQVR4Xuy9SXPjytKm6ZwnUbNyHs7Jc7/VV9bW1WXWi9qimage_data = Base64.decode64(data['data:image/png;base64,'.length .. -1])new_file=File.new("somefilename.png", 'wb')new_file.write(image_data)

After you can use image as a filePhoto.new(image: image)#save using paperclip in Photo model