Validar una imagen
Un PNG de 8 por 4 píxeles y 74 bytes revisado con un ancho mínimo de 16 no pasa, y se le explica el motivo. Se lee el contenido real del archivo, no su nombre, y obtiene el formato, el ancho, el alto y el peso. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Un formulario de subida que confía en la extensión del archivo es un ticket de soporte esperando a suceder. Responde una sola pregunta con precisión: ¿este archivo es lo que dice ser, y cabe dentro de sus límites?
Por qué el nombre del archivo no basta
Un formulario de subida que se fía de la extensión del archivo es una incidencia de soporte esperando a ocurrir. Las personas y los navegadores envían lo que no es a todas horas, a veces a propósito y casi siempre sin querer: un archivo renombrado, una descarga dañada, una foto HEIC guardada con terminación .jpg. Revisar la extensión o el tipo que declara el navegador no detecta nada de eso, porque ambos los aporta quien envía y fallan con facilidad. Esta comprobación abre el archivo y lee su firma y su estructura reales, la única forma fiable de saber qué tiene usted entre manos.
Sus propios límites y dónde aplicarlos
Usted pone las reglas: el peso máximo que acepta, un tamaño mínimo o máximo en píxeles y los formatos permitidos. La respuesta indica el formato detectado, el ancho y el alto, el peso y un veredicto claro con su motivo, de modo que un PNG diminuto de 8 por 4 píxeles no pasa un ancho mínimo de 16. Úsela en cuanto llega el archivo, antes de guardarlo o publicarlo: un mercado en línea que recibe fotos de producto, una red social que acepta fotos de perfil, una agencia que reúne cientos de archivos de un diseñador externo o una fototeca que nunca debe publicar una imagen enorme.
La distancia entre 'archivo.jpg' y un JPEG real
Los navegadores y los usuarios le mienten constantemente a los formularios de subida, a veces a propósito y muchas veces por accidente: un archivo renombrado, una descarga corrupta, un HEIC guardado con extensión .jpg. Revisar un encabezado MIME o la extensión no detecta nada de eso, porque ambos los define el cliente y son fáciles de falsear.
Qué puede hacer con ella
Recepción de fotos de producto en un marketplace
Un vendedor sube una foto de producto y la plataforma valida que sea un JPEG o PNG real y por debajo del límite de peso antes de que llegue al proceso de publicación.
Filtro para avatares de usuario
Una red social verifica que la foto de perfil subida sea realmente una imagen dentro de los límites de dimensión antes de generar miniaturas, evitando procesar archivos inválidos.
Recepción masiva de assets de un contratista
Una agencia que recibe cientos de assets de diseño de un freelancer valida cada archivo contra reglas de formato y peso antes de importarlos al proyecto.
Barrera en la biblioteca de medios de un CMS
El CMS de un equipo de contenido valida cada archivo subido contra una política de tamaño y formato para que los editores no publiquen por error una imagen demasiado pesada o en formato incorrecto.
Preguntas frecuentes
¿Detecta archivos mal etiquetados, como un HEIC guardado como .jpg?
Sí, porque la revisión lee la firma y estructura reales del archivo en lugar de confiar en la extensión o el tipo MIME que envía el cliente.
¿Qué formatos se pueden validar?
Se detectan y validan JPEG, PNG, WebP y GIF; la respuesta indica exactamente qué formato se encontró, coincida o no con lo que esperaba.
¿Puedo definir mis propios límites de tamaño y dimensiones?
Sí, usted envía las restricciones (peso máximo, ancho y alto mínimo o máximo, formatos permitidos) y el resultado incluye una bandera clara de aprobado o rechazado según esas reglas.
¿Qué pasa con archivos corruptos o ilegibles?
Un archivo genuinamente ilegible devuelve un resultado claro de formato no válido en lugar de un error, así su backend puede rechazarlo con un motivo específico en vez de adivinar.
¿Por qué no basta la extensión del archivo para fiarse de una subida?
Porque la extensión y el tipo que declara el navegador salen del equipo de quien envía, y se equivocan con facilidad: un archivo renombrado o una descarga dañada parecen correctos por el nombre. Solo leer el propio archivo revela lo que es.
Herramientas relacionadas
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/image/validate \
-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/validate", {
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/validate",
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/validate", 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/validate", 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.validate",
"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. |
Notas técnicas
La API para validar imagen inspecciona los bytes reales del archivo, no el nombre, y devuelve formato, dimensiones en píxeles y peso en kilobytes para que su backend acepte o rechace una subida con certeza.
La distancia entre 'archivo.jpg' y un JPEG real
Este endpoint abre el archivo y lee su firma y estructura reales, que es la única manera confiable de saber qué tiene en verdad.
Qué se revisa
Esa respuesta estructurada es justo lo que un backend necesita para decidir, en una sola rama de lógica, si guarda el archivo o lo devuelve al usuario con un motivo específico. Envía una imagen por POST a /image/validate y la tarea devuelve el formato detectado, el ancho y alto en píxeles, y el peso en kilobytes, junto con una bandera de aprobado o rechazado según las restricciones que haya definido: peso máximo, dimensiones mínimas o máximas, formatos permitidos.
Dónde encaja en un flujo de subida
La mayoría de los equipos llaman a este endpoint apenas llega el archivo, antes de que toque almacenamiento permanente, una red de distribución o un registro en base de datos. Como la revisión corre de forma asíncrona, un flujo de subida dispara la solicitud y espera brevemente el webhook en un formulario pequeño, o encola el archivo para confirmación posterior en una importación masiva; cualquiera de los dos patrones evita mantener un hilo de solicitud abierto mientras se inspecciona una imagen byte por byte.
A quién protege esto
Marketplaces que validan fotos de producto subidas por vendedores, plataformas de contenido generado por usuarios que filtran fotos de perfil antes de procesarlas más a fondo, y herramientas internas que reciben assets de diseño de contratistas externos confían en este endpoint por la misma razón: detener un archivo defectuoso en la puerta sale más barato que depurar por qué rompió un proceso de redimensionado tres pasos después.
Un precio simple y honesto
Una solicitud que falla por un error pasajero se reintenta automáticamente hasta tres veces antes de devolver un error claro, y nunca se cobra una tarea fallida, solo un resultado de validación completado. La validación se factura con una tarifa fija única por solicitud, sin multiplicador por imagen, porque un archivo entra y una revisión sale.
Preguntas técnicas
¿Qué revisa exactamente la API para validar imagen?
Inspecciona los bytes reales del archivo para detectar el formato verdadero, luego reporta ancho y alto en píxeles y peso en kilobytes, indicando si el archivo cumple con los límites de formato, tamaño y dimensiones que defina.
¿La API para validar imagen 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.
¿Qué tan rápido recibo el resultado?
La tarea corre de forma asíncrona y devuelve un task_id de inmediato; el resultado de la validación llega por webhook firmado, o puede obtenerlo desde un enlace firmado válido por 24 horas.
¿Puedo validar un lote grande de imágenes de una vez?
Cada solicitud valida una imagen, así que una importación masiva llama al endpoint una vez por archivo; como se factura con una tarifa fija por solicitud, el costo escala de forma predecible con el volumen.