Calcular la caja delimitadora de una ruta SVG
Esta calculadora lee los comandos de coordenadas de una ruta SVG y devuelve sus valores x e y mínimos y máximos, además del ancho y la altura.
Ejecutar — gratis
Procesa segmentos rectos, curvas de Bézier, arcos elípticos, comandos relativos, puntos de control suaves y subrutas cerradas. Como una curva puede sobrepasar sus extremos y los puntos de control no siempre pertenecen a ella, el cálculo evalúa los extremos geométricos en lugar de limitarse a reunir los números del código fuente.
Calcule los límites solo con los datos de la ruta
Pegue en el campo correspondiente el valor del atributo <code>d</code> de una ruta SVG. La calculadora admite los comandos estándar de movimiento, línea, horizontal, vertical, Bézier cúbica y cuadrática, sus variantes suaves, arco elíptico y cierre, tanto absolutos como relativos. Devuelve <code>min_x</code>, <code>min_y</code>, <code>max_x</code>, <code>max_y</code>, ancho y altura. El rectángulo se expresa en el sistema de coordenadas propio de la ruta. No aplica transformaciones del elemento o sus grupos ni amplía el resultado por trazos, remates, uniones, marcadores, filtros o recortes. Por ello mide exactamente la geometría central. Una ruta vacía genera un error, mientras que un único punto de movimiento produce correctamente ancho y altura iguales a cero.
Por qué las curvas exigen extremos analíticos
Una caja fiable no se obtiene observando solo los extremos de cada segmento. Una Bézier puede alcanzar un mínimo o máximo entre el inicio y el final, y un punto de control puede quedar fuera sin que la curva lo toque. La calculadora resuelve la derivada de cada coordenada y evalúa las raíces interiores. Para los arcos, convierte la representación SVG a centro, considera el ajuste de radios y la rotación, deriva los ángulos extremos y conserva únicamente los incluidos en el barrido elegido. Los comandos suaves reflejan el control anterior, los relativos usan el punto actual y el cierre añade el segmento de retorno. Así se obtienen límites geométricos sin muestreo y no se pierde un pico estrecho entre muestras arbitrarias.
Use el resultado en diseños y herramientas SVG
El rectángulo sirve para crear un viewBox, centrar ilustraciones, normalizar iconos, comparar extensiones, colocar anotaciones o validar geometría generada. Para formar un viewBox, use <code>min_x min_y width height</code> en ese orden. Si existe un trazo visible, añada después el margen que requieran su grosor y sus uniones; trate las transformaciones con el procedimiento matricial adecuado. El analizador acepta separadores por comas o espacios, signos adyacentes, decimales y notación científica. Rechaza comandos desconocidos, grupos incompletos, texto mal formado, banderas de arco inválidas y radios negativos. El resultado es determinista, no necesita red ni renderizador externo y usa el mismo cálculo puro en el navegador y en la API.
Qué puede hacer con ella
Genere un viewBox ajustado
Convierta las coordenadas mínimas, el ancho y la altura en un viewBox que encuadre la geometría.
Normalice una colección de iconos
Mida las rutas de forma uniforme antes de trasladar o escalar los iconos a un sistema común.
Valide geometría SVG generada
Compruebe que las curvas y los arcos producidos por código permanezcan dentro del lienzo previsto.
Preguntas frecuentes
¿Calcula con precisión curvas y arcos?
Sí. Evalúa extremos analíticos de curvas de Bézier y arcos elípticos rotados, sin muestreo.
¿Incluye el grosor del trazo?
No. Cubre solo la geometría de la ruta, sin trazo, remates, uniones, marcadores, filtros ni otros efectos.
¿Aplica las transformaciones SVG?
No. Mide las coordenadas en el sistema propio de la ruta; las transformaciones externas quedan fuera de la entrada.
¿Qué ocurre si la ruta está vacía?
La solicitud falla por entrada no válida, ya que una ruta vacía no tiene caja delimitadora.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La versión del navegador se ejecuta localmente sin coste.
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/web/svg-path-bounding-box \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"path":"M10 20 C30 0 50 40 70 20 L90 60"}'const res = await fetch("https://api.kit.forhosting.com/web/svg-path-bounding-box", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"path": "M10 20 C30 0 50 40 70 20 L90 60"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/svg-path-bounding-box",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"path": "M10 20 C30 0 50 40 70 20 L90 60"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/svg-path-bounding-box", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"path":"M10 20 C30 0 50 40 70 20 L90 60"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"path":"M10 20 C30 0 50 40 70 20 L90 60"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/svg-path-bounding-box", 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
{
"path": "M10 20 C30 0 50 40 70 20 L90 60"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.svg_path_bounding_box",
"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
timeout_sec | 30 |
max_crawl_pages | 25 |
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. |