Poner texto en una imagen
Una foto de producto sin etiqueta de precio, un banner sin titular, una miniatura sin rótulo: todas quedan a medio terminar hasta que el texto se posa sobre los píxeles. Este endpoint coloca uno o varios textos sobre una imagen en la posición, tamaño y color que defina, y devuelve un archivo terminado en lugar de uno a medio construir.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
La distancia entre una foto y una pieza terminada
Entre una foto sin procesar y una imagen lista para publicar hay un puñado de decisiones de diseño que son triviales para una persona y tediosas de automatizar: dónde va el precio, qué tamaño lleva el titular, si el texto necesita un fondo para seguir siendo legible sobre una foto cargada de detalles. Este endpoint recibe esas decisiones como parámetros —texto, posición, tamaño de fuente, color, fondo opcional— y las aplica igual cada vez, algo que importa mucho más de lo que suena cuando lo hace mil veces al día.
Quién coloca texto sobre imágenes a gran escala
Marketplaces que estampan el precio o una insignia de 'vendido' en cada foto de anuncio, equipos de comercio electrónico que generan un lote de banners promocionales a partir de una plantilla y una hoja de cálculo de titulares, herramientas de programación de redes sociales que graban una cita o un rótulo sobre una imagen de fondo antes de publicarla, plataformas inmobiliarias que añaden una etiqueta de estado como 'disponible' o 'reservado' a cada foto de propiedad.
Qué ocurre realmente con el archivo
Envía la imagen de origen junto con el texto y su ubicación, recibe de inmediato un task_id, y la tarea graba el texto directamente en la imagen —no como una capa aparte, sino integrado en los píxeles— de modo que el archivo que regresa está listo para publicarse tal cual, sin abrir ningún programa de diseño.
Dónde encaja en un flujo más amplio
Como cada llamada se cobra por imagen y responde de forma asíncrona, encaja de forma natural después de que una imagen se sube o se genera y antes de que se publica: se fotografía un anuncio, el precio se superpone automáticamente, y la imagen terminada pasa directo al escaparate sin que nadie abra un editor en el medio.
Una operación pequeña con impacto grande
Superponer texto es uno de los trucos más antiguos de la edición de imágenes —anterior incluso a las herramientas digitales, con raíces en la rotulación a mano y el revelado analógico— pero hacerlo de forma correcta y uniforme en miles de imágenes al día es un problema muy distinto a hacerlo bien una sola vez en un editor, y ese es el vacío que cierra este endpoint.
Qué puede hacer con ella
Estampado de precios en marketplaces
Una plataforma de anuncios superpone el precio vigente en cada foto de producto en el momento en que el vendedor lo actualiza, manteniendo las imágenes sincronizadas con el inventario.
Banners promocionales por lotes
Un equipo de marketing genera los banners de redes sociales de toda la semana a partir de una plantilla de fondo y una hoja de cálculo con titulares y fechas.
Etiquetas de estado inmobiliario
Un portal inmobiliario estampa 'Disponible', 'Vendido' o 'Reservado' sobre las fotos de las propiedades de forma automática según cambia el estado.
Piezas de citas y rótulos
Un programador de contenido graba una cita diaria sobre una imagen de fondo antes de dejarla lista para publicar, sin ningún paso manual de diseño.
Preguntas frecuentes
¿Cómo pongo texto en una imagen con esta API?
Envíe un POST a /image/text-overlay con la imagen de origen y el texto junto con su posición, tamaño y color; recibe un task_id y la imagen terminada llega por webhook o enlace firmado.
¿Tiene prueba gratuita?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo se cobra?
$0.002 por solicitud más $0.005 por imagen, un precio publicado y plano sin importar cuánto texto se coloque.
¿Puedo añadir más de una línea de texto?
Sí, se pueden colocar varios elementos de texto sobre la misma imagen en una sola llamada, cada uno con su propia posición y estilo.
¿Qué formatos de imagen admite?
Se aceptan formatos rasterizados comunes como JPEG y PNG, y el resultado conserva el formato y las dimensiones de la imagen de origen.
¿Puedo controlar la fuente, el tamaño y el color?
Sí, el tamaño de fuente, el color y un fondo opcional son parámetros que define por cada elemento de texto para tener control total sobre el resultado.
¿Se cobra si el proceso falla?
No. Una tarea fallida se reintenta automáticamente hasta tres veces y nunca se cobra; en su lugar recibe un error claro.
¿Puedo procesar un lote de fotos de producto a la vez?
Cada llamada procesa una imagen y devuelve su propio task_id, así que procesar mil fotos de producto es simplemente mil solicitudes en paralelo recogidas por webhook.
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/text-overlay \
-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/text-overlay", {
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/text-overlay",
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/text-overlay", 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/text-overlay", 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.text_overlay",
"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. |