---
seo_title: API de PNG a SVG: Incrusta un PNG en un SVG | EnConvert
meta_desc: Incrusta un PNG en un SVG con POST /v1/convert/png-to-svg. El PNG va en base64 como URI de datos en un elemento image del SVG: contenedor, no vectorización.
keywords: convertir png a svg, incrustar png en svg, png a svg sin vectorizar, api png a svg, base64 png en svg, png a svg rest api, contenedor svg para png, imagen raster en svg
---

# API de PNG a SVG

La API de PNG a SVG incrusta una imagen PNG dentro de un contenedor SVG con una sola solicitud a `POST /v1/convert/png-to-svg`. Los datos del PNG se codifican en base64 y se colocan como un URI de datos dentro de un elemento `<image>` de SVG, con las dimensiones del SVG y el viewBox coincidiendo con las dimensiones en píxeles de la imagen original. Esto no es vectorización: la salida es una imagen ráster envuelta en SVG. Las respuestas devuelven los bytes del SVG directamente, o metadatos JSON con una URL de descarga prefirmada cuando `direct_download=false`.

---

## Endpoint

```
POST /v1/convert/png-to-svg
```

**Content-Type:** `multipart/form-data`

**Entrada aceptada:** archivos `.png`

**Formato de salida:** `.svg` (`image/svg+xml`)

---

## Autenticación

Requiere una clave de API privada o un token JWT de una clave pública.

```
X-API-Key: sk_your_private_key
```

O:

```
Authorization: Bearer <jwt_token>
```

---

## Parámetros de la solicitud

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|----------|---------|-------------|
| `file` | file | Sí | -- | El archivo de imagen `.png` a convertir. |
| `output_filename` | `string` | No | Nombre del archivo de entrada | Nombre de archivo de salida personalizado. La extensión `.svg` se añade automáticamente. |
| `direct_download` | `boolean` | No | `true` | Cuando es `true`, devuelve los bytes de la imagen sin procesar. Cuando es `false`, devuelve metadatos JSON con una URL de descarga prefirmada. |

---

## Detalles de la conversión

- El PNG se **codifica en base64 y se incrusta** dentro de un elemento `<image>` de SVG como un URI de datos
- Las dimensiones del SVG y el viewBox coinciden con las dimensiones en píxeles de la imagen original
- La transparencia del PNG se conserva en los datos incrustados
- **Esto NO es vectorización**: la salida contiene los datos completos de la imagen ráster, no rutas vectoriales

<div class="alert alert-warning">
<strong>No es vectorización:</strong> Este endpoint incrusta la imagen ráster dentro de un contenedor SVG. No traza ni convierte la imagen en rutas vectoriales. El archivo de salida será más grande que el de entrada debido a la codificación base64 (~33% de sobrecarga).
</div>

---

## Respuesta

### Descarga directa (`direct_download=true`, predeterminado)

```
HTTP 200 OK
Content-Type: image/svg+xml
Content-Disposition: inline; filename="image_20260405_123456789.svg"
```

Devuelve los bytes de la imagen sin procesar.

### Respuesta con metadatos (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/png-to-svg/image_20260405_123456789.svg",
    "filename": "image_20260405_123456789.svg",
    "file_size": 45678,
    "conversion_time_seconds": 0.5
}
```

---

## Ejemplos de código

### Python

```python
import requests

with open("image.png", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/png-to-svg",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("image.png", f)}
    )

with open("image_20260405_123456789.svg", "wb") as out:
    out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("image.png"));

const response = await fetch("https://api.enconvert.com/v1/convert/png-to-svg", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

fs.writeFileSync("image_20260405_123456789.svg", Buffer.from(await response.arrayBuffer()));
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/png-to-svg");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("image.png")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("image_20260405_123456789.svg", $output);
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "image.png")
file, _ := os.Open("image.png")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/png-to-svg", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Respuestas de error

| Estado | Condición |
|--------|-----------|
| `400 Bad Request` | El archivo no es un archivo `.png` |
| `400 Bad Request` | La conversión de la imagen falló (archivo corrupto o no compatible) |
| `401 Unauthorized` | Falta la clave de API/token JWT o no es válida |
| `402 Payment Required` | Se agotó la cuota mensual de ops |
| `402 Payment Required` | Se alcanzó el límite de almacenamiento |
| `413 Payload Too Large` | El archivo supera el tamaño máximo permitido por tu plan |

---

## Límites

| Límite | Valor |
|-------|-------|
| Tamaño máximo de archivo | Según el plan (Founding: 5 MB) |
| Calidad de salida | Máxima (no configurable) |
| Conversiones mensuales | Según el plan |

---

## Preguntas frecuentes

### ¿La API de PNG a SVG vectoriza mi imagen?

No. Este endpoint incrusta el PNG ráster dentro de un contenedor SVG como un URI de datos en base64 en un elemento `<image>` de SVG; no traza ni convierte la imagen en rutas vectoriales.

### ¿Por qué mi archivo SVG de salida es más grande que el PNG de entrada?

El PNG se codifica en base64 al incrustarse en el SVG, lo que añade aproximadamente un 33% de sobrecarga, por lo que el archivo de salida es más grande que el de entrada.

### ¿Se conserva la transparencia del PNG al incrustarlo en el SVG?

Sí. La transparencia del PNG se conserva en los datos incrustados, y las dimensiones del SVG y el viewBox coinciden con las dimensiones en píxeles de la imagen original.

### ¿Cómo convierto PNG a SVG con una API REST?

Envía una solicitud `POST` a `/v1/convert/png-to-svg` con tu archivo `.png` como `multipart/form-data`, autenticada mediante `X-API-Key` o un token JWT `Authorization: Bearer`. Recibes los bytes del SVG, o un `presigned_url` en JSON cuando `direct_download=false`.

### ¿Por qué la API devuelve 400 Bad Request?

Un `400 Bad Request` significa que el archivo subido no es un archivo `.png`, o que la conversión de la imagen falló porque el archivo está corrupto o no es compatible.
