1 min read

Embed di un'immagine in Base64 in ruby

Se guardate il codice output di Facebook alcune immagini non hanno una url pubblica, quindi non si possono linkare (hotlink) e non consumano un'altra richiesta HTTP, come si fanno queste immagini da embeddare in una pagina html?

Facile, in ruby ci sono 2 metodi che ci permettono di crearle quasi out-of-the-box il primo è incluso da ruby 1.9.x mentre il secondo è presente in una libreria inclusa in Ruby on Rails.

require 'base64'
Base64::encode64(open("like.png") { |io| io.read })

ma in questo caso l'output presenta dei caratteri di disturbo \n, oppure

 

require 'active_support'
ActiveSupport::Base64.encode64s(open("like.png") { |io| io.read })

 => "iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAMAAADjcdz2AAAAAXNSR0IArs4c6QAAASBQTFRFNDQ0/////v7+m6vLbIOz5eny6u30NliZ0trpu7u7ZmZm4eHhc4q2wsrfZGRk2dnZREREVVVVUWykHkWAvcjevr6+YHisqqqqw8PDO1mY4ubw09PTnp6eTU1NY3ijdYu43d3dx8fH1NTU7u7u3uLuYneiy8vLpqam6Ojoz9jodXV1iYmJuLi4zs7O29vb6enpaH+xwMDAkZGRWGqRxczi8vLyjIyMoKCgjaDFfn5+q6ure4+65eXlv8rgZWVlrrvVv8XbjY2N7vH209no4uLiqampvLy8d3d3qKioe3t7vb297vD219fXSmik5OTkioqKpKSkOVWUtLS09vb2T2qjVXGp+vr6tsDccIOvjJ7DV2qQsL7bV1dXXneuaWlpkKTJ22w++QAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2wkEECw61USiBgAAAExJREFUGNNjYCACiEnCgRhYQBIJIAvwMDLyoAgwsjqoogo4oGgRYmbUZBZCEgCagGGGJpotSAIsYMCowsKCIsAEFxATDhSGIjEGcgAAZRsMGsUx+J8AAAAASUVORK5CYII=

 

Questa lunghissima stringa BLOB (che finisce con =) va inserita in un elemento html o css e il risultato sarà l'immagine che vedete sopra. Esempio Live

<div style="background:url(
data:image/png;BLOB
); height:15px; width:15px;"></div>