Comprimir una imagen
Cada imagen sin comprimir en una página son bytes que un visitante debe descargar antes de ver algo. Este endpoint recomprime un JPEG o PNG a un peso menor manteniendo la imagen visualmente igual, para que una galería de quinientas fotos deje de ser la razón por la que una página carga lento.
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.
Por qué el peso del archivo importa en silencio
Una foto recién tomada con una cámara o un teléfono suele traer mucha más información de la que una pantalla necesita para mostrarla — datos de color, metadatos y sobrecarga de codificación que suman peso sin sumar detalle visible. Ese peso extra se traduce directamente en tiempo de carga, consumo de datos móviles y costo de alojamiento, por eso la compresión es una de las pocas optimizaciones que se paga sola de inmediato.
Quién pasa sus imágenes por compresión
Tiendas en línea con miles de fotos de producto donde el tiempo de carga afecta la conversión; medios cuyas imágenes de artículo son la mayor parte del peso de una página; backends de aplicaciones que reciben fotos subidas a resolución completa de cámara y necesitan guardar una versión más liviana. Donde se sirven imágenes a visitantes reales en conexiones reales, la compresión es el paso entre una carga cruda y una página que carga rápido.
Qué pasa con su imagen
Envía el archivo de origen, recibe de inmediato un task_id y la tarea la comprime — reduciendo el peso del archivo mientras conserva la calidad visual — sin cambiar sus dimensiones ni su formato. Cuando está lista le avisamos por webhook firmado, o recoge la imagen comprimida desde un enlace firmado válido por 24 horas.
Cómo encaja en un flujo de carga
Como es asíncrona y solo se cobra si tiene éxito, la compresión se integra justo después de la carga sin agregar una demora visible para el usuario: se acepta el original, una solicitud de compresión se dispara en segundo plano, y la versión más liviana lo reemplaza en cuanto el webhook confirma que está lista. Un lote de miles de imágenes antiguas funciona igual, enviado en paralelo y recogido a medida que cada una termina.
Una breve nota sobre cómo funciona la compresión
El JPEG usa compresión con pérdida desde que el formato se estandarizó en 1992, descartando el detalle que el ojo tiene menos probabilidad de notar; el PNG, que llegó unos años después, comprime sin pérdida en cambio, reduciendo el peso del archivo sin descartar ni un solo píxel de información. Como ambos formatos equilibran de forma distinta el peso y la fidelidad, comprimirlos bien significa aplicar la técnica correcta a cada uno en lugar de tratar toda imagen por igual.
Qué puede hacer con ella
Optimización de catálogo de productos
Una tienda en línea comprime cada foto de producto al subirla para que las páginas de categoría carguen más rápido sin verse notoriamente peor.
Flujos de imágenes de artículos
Una plataforma editorial comprime automáticamente las imágenes destacadas y las que van dentro del texto, reduciendo el peso de la página sin que una persona revise cada foto.
Subidas desde aplicaciones móviles
Un backend comprime las fotos que suben los usuarios antes de guardarlas, reduciendo el costo de almacenamiento en millones de subidas.
Limpieza de archivos multimedia antiguos
Una biblioteca de medios ejecuta un lote único para comprimir miles de imágenes viejas sin comprimir, sin retocarlas una por una.
Preguntas frecuentes
¿Está disponible ya la API para Comprimir Imagen?
Sí, está en producción en POST /image/compress con el precio de abajo ya vigente.
¿Cómo se cobra?
$0.002 por solicitud más $0.005 por imagen, publicado e igual sin importar si comprime una foto o cien mil.
¿La compresión cambia las dimensiones de la imagen?
No, solo cambia el peso del archivo; el ancho y el alto se mantienen exactamente como en la imagen de origen.
¿Se va a notar la diferencia a simple vista?
La compresión está ajustada para reducir el peso del archivo conservando la calidad visual, así que el resultado debería verse prácticamente igual a tamaños normales de visualización.
¿Qué formatos puedo comprimir?
Se soportan JPEG y PNG, cada uno comprimido con la técnica adecuada a su formato — con pérdida para JPEG, sin pérdida para PNG.
¿Es una API gratis?
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 recibo la imagen comprimida?
Por webhook firmado cuando la tarea termina, o mediante un enlace firmado válido por 24 horas.
¿Se cobra si la compresión falla?
No. Las tareas fallidas se reintentan automáticamente hasta tres veces y nunca se cobran; en su lugar recibe un error claro.
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/compress \
-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/compress", {
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/compress",
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/compress", 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/compress", 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.compress",
"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. |