Internet, desarrollo web, música y desvaríos del autor
7 Nov
Por medio de Base64, un sistema de codificación, podemos transformar cualquier tipo de archivo a caracteres simples ( texto plano ). Esto resulta muy útil cuando no queremos crear por ejemplo multiples archivos de imagen para adjuntarlos.
Si conocen Stylish, una extension para firefox, se preguntaran como hacen los autores de un tema para que en un archivo de css vayan incluidas las imagenes. Pues… base64 es la solucion. Además es ideal para hostings restrictivos, pues lo que estas arhcivando es simple texto.
La estructura basica que tiene un archivo codificado en base64 es la siguiente. El ejemplo es de un archivo png:
data:image/png;base64,MuChasLetrasyNum3r0s
Entonces… examinemos despacio cada uno de los componentes.
data:image/png
Nos indica que tipo de archivo estamos enlazando. Podemos reemplazar el “image/png” por el MIME type del tipo de archivo que vamos a usar. Una lista de MIME types esta disponible para que no te pierdas en esa parte.
Lo siguiente, base64, simplemente indica que el texto siguiente está codificado en base64.
MuChasLetrasyNum3r0s : Compone el archivo codificado en texto plano. Eso es lo divertido, lo que te voy a enseñar a continuacion
Php tiene dos funciones nativas que nos pueden ser muy utiles en este aspecto: base64_encode y base64_decode
Entonces, sabiendo eso, solo nos queda crear una funcion sencilla para leer un archivo y convertirlo:
<?php
function codificarImagen ($imagen) {
echo "data:image/png;base64,".base64_encode(file_get_contents($imagen));
};
codificarImagen("imagen.png");
?>
Lo anterior nos devuelve la imagen png convertida a base64. Fácil, no?
Bueno, genial, tranforme mi linda imagen a un monton de numeros y letras raros. ¿Y?
La buena noticia es que no tienes que hacer nada mas. Simplemente usa tu supertexto para todo:
Una imagen normal
<img title="Imagen en Base64" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...." />
Una imagen de fondo en css:
<style type="text/css">
div.imagen{
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA....);
}
</style>
Un css completo:
<link href="data:text/css;base64,iVBORw0KGgoAAAANSUhEUgA.." rel="stylesheet" type="text/css" />
Un js completo:
<script src="data:text/javascript;base64,iVBORw0KGgoAAAANSUhEUgA..." type="text/javascript"></script>
Y creo que ya entendieron el mensaje.
Desafortunadamente, y como sucede normalmente con lo cool, ie6 no soporta la codificacion en Base64. Sin embargo, los otros browsers (los decentes, como Firefox, Opera, Safari, etc) si, e incluso hay hacks para que funcione en el “bendito”. Uno de los mejores es el siguiente:
Fix para Base64 en ie6, por Dean Edwards
Las imagenes y archivos aparte no son malos, de modo que usa esta tecnica cuando se justifique, no vayas a empezar a codificar todas tus imagenes XD (so, es decir que no abuses). Lo otro es que logicamente a archivos mayores, el tamaño de la cadena de texto generada es mayor. Y por ultimo, no siempre se gana tamaño al codificar una imagen: A veces (bueh, la verdad, no se si siempre) se gana tamaño al ser convertido en texto. Esperen comparativas U_U
Un saludo
4 Responses for "Codificar imagenes, css o lo que quieras con Base64"
hola, tengo una pregunta acerca de este tema.
Tu informacion me resulto de mucha ayuda para comprender un problema que tengo…tengo el codigo de una imagen en base 64, pero no puedo codificarlo en la imagen en si, debo estar cometiendo un error, podrias explicarme de una forma simple como hacer el proceso?
de antemano, gracias
Claro, breve y al grano. Muy buen post!
Oye sabes algo hacerca de la codificacion de base64 de paginas completas que contengan html y php embebido? es q yo logre codificar el problema es q al decodificar pasa algo raro, si es una pagina con scrips simples de php todo esta bien pero si contiene comparaciones o llamadas a funciones dentro de clases no interpreta correctamente el codigo y no construye bien la pagina todo esto cuando hay este caracter “>”
Además pudes emplear un code de un imagen para mercadores:
Leave a reply