Imagen a Base64
Hay contextos donde simplemente no se puede cargar una imagen externa: un cliente de correo que bloquea contenido remoto, un generador de PDF que solo entiende datos incrustados, una app que funciona sin conexión. La API imagen a Base64 convierte una imagen en un data URI listo para pegar, de modo que viaja incrustada dentro del documento en vez de como una solicitud aparte. Envía la imagen y recibe la cadena codificada con el prefijo MIME correcto ya incluido.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué incrustar una imagen sigue siendo necesario
La codificación Base64 de datos binarios dentro de texto es anterior a la web moderna por décadas: se creó originalmente para pasar adjuntos binarios por sistemas de correo que solo manejaban texto plano. Ese mismo truco resolvió un problema distinto cuando el correo en HTML y los PDF necesitaron imágenes que no podían depender de que una carga externa funcionara al momento de renderizar. La web avanzó hacia redes rápidas para la mayoría de las imágenes, pero los casos puntuales donde incrustar es la única opción nunca desaparecieron.
Qué devuelve realmente el endpoint
Envía una imagen por POST a /image/to-base64 y la tarea devuelve una sola cadena: el data URI, con el formato data:image/[tipo];base64,[contenido codificado], con el tipo MIME detectado a partir del archivo mismo y no adivinado por su nombre. Esa cadena se coloca directamente en un atributo img src, una regla background-image de CSS, o un campo de plantilla de PDF, sin que tenga que ensamblar nada adicional.
El compromiso que conviene conocer
La codificación Base64 aumenta el tamaño del archivo en aproximadamente un tercio, y una imagen incrustada no puede almacenarse en caché por separado como sí ocurre con un archivo enlazado. Ese compromiso es justo la razón por la que esta técnica pertenece a situaciones específicas (correo, PDF, paquetes sin conexión, íconos pequeños de pocos kilobytes) y no como forma predeterminada de servir imágenes en una página web normal, donde un enlace directo casi siempre rinde mejor.
Cómo encaja en un flujo automatizado
Como la conversión es asíncrona, encaja en un flujo de renderizado de plantillas igual que cualquier otro paso de obtención de datos: un servicio de correo transaccional llama a este endpoint mientras arma un recibo o boletín, espera el webhook y luego inserta la cadena devuelta en el HTML antes de enviarlo. Los scripts de generación de PDF hacen lo mismo cuando un logo o gráfico necesita quedar incrustado en vez de enlazado.
Un precio simple y predecible
La codificación se factura con una tarifa fija única por solicitud sin importar las dimensiones de la imagen, ya que el trabajo escala con el tamaño del archivo, no con la cantidad de píxeles, y se mantiene liviano en cualquier caso. Una solicitud que falla se reintenta automáticamente hasta tres veces antes de devolver un error claro, y nunca se cobra una conversión que no se completó.
Qué puede hacer con ella
Logo incrustado en correo HTML
Un servicio de correo transaccional incrusta el logo de la empresa como data URI para que se muestre correctamente en bandejas que bloquean la carga remota de imágenes por defecto.
Generación de facturas en PDF
Un sistema de facturación incrusta una firma o un logo directamente en la plantilla de un PDF generado, sin depender de una carga externa de imágenes al momento de renderizar.
Assets de una app web sin conexión
Una aplicación web progresiva incrusta íconos pequeños de la interfaz como data URI para que se vea correctamente incluso sin conexión a internet.
Reportes HTML de un solo archivo
Una herramienta interna de reportes incrusta miniaturas de gráficos como cadenas base64 para que el reporte HTML exportado funcione como un archivo autocontenido sin enlaces de imagen rotos.
Preguntas frecuentes
¿Qué devuelve exactamente la API imagen a Base64?
Una sola cadena de data URI con el formato data:image/[tipo];base64,[contenido], con el tipo MIME detectado a partir del archivo real, lista para pegar en una etiqueta img o una regla de CSS.
¿Qué formatos de imagen se pueden convertir?
Se admiten PNG, JPEG, WebP y GIF; el tipo MIME del data URI devuelto refleja el formato detectado en el archivo de origen.
¿La codificación Base64 hace más pesado el archivo?
Sí, la codificación aumenta el tamaño en aproximadamente un tercio respecto al binario original, por eso incrustar funciona mejor con imágenes pequeñas como íconos y logos, no con fotografías grandes.
¿Cuándo debería usar un data URI en vez de un enlace de imagen normal?
Úselo cuando el destino no pueda cargar de forma confiable un archivo externo (correos HTML, PDF, paquetes sin conexión) y evítelo en páginas web normales, donde una imagen enlazada y cacheable rinde mejor.
¿La API imagen a Base64 es gratuita?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cómo recibo el resultado codificado?
La tarea corre de forma asíncrona y devuelve un task_id de inmediato; el data URI llega por webhook firmado, o puede obtenerlo desde un enlace firmado válido por 24 horas.
¿Hay un límite de tamaño para la imagen de origen?
Los archivos de origen muy grandes simplemente tardan un poco más y producen una cadena codificada más larga; las imágenes extremadamente grandes en general no son buenas candidatas para incrustar, más allá del límite.
¿Qué pasa si la conversión falla?
La tarea reintenta automáticamente hasta tres veces antes de devolver un error claro, y una conversión fallida nunca se cobra.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/image/to-base64 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/to-base64", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/to-base64",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/to-base64", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/to-base64", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.to_base64",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 15 |
max_megapixels | 12 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |