Zwei Endpunkte, eine Aufgabe: SVG-Markup verkleinern oder ein beliebiges Bild als data:-URI zum Inline-Einbetten verpacken. Beide laufen serverseitig, daher ist das Ergebnis deterministisch und in allen Browsern identisch.

# Optimize an SVG snippet
curl -X POST https://jinero.online/api/v1/svg/optimize \
  -H "Content-Type: application/json" \
  -d '{"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2L2 22h20z\"/></svg>", "preset": "balanced"}'
const r = await fetch("https://jinero.online/api/v1/svg/optimize", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ svg: source, preset: "balanced" }),
});
const { output, savings_percent } = await r.json();

Alle Endpunkte sind öffentlich – kein API-Schlüssel nötig. Die Operationen sind zustandslos und ressourcenschonend, daher sind die Limits großzügig.

# Anonymous limits (per IP):
#   POST /svg/optimize    30 req/min
#   POST /svg/to-datauri  30 req/min
#   GET  /svg/presets     60 req/min

# Max SVG body: 500,000 chars (~500 KB)

Schickt SVG-Markup mit einem von drei Presets durch SVGO. Entfernt Metadaten, fasst Transformationen zusammen, rundet Pfaddaten – meist 30–60 % kleiner ohne sichtbare Änderungen.

POST https://jinero.online/api/v1/svg/optimize
ParameterTypBeschreibung
svg string SVG-Markup (mit oder ohne XML-Prolog). Max. 500.000 Zeichen.
preset string safe (minimale Bereinigung), balanced (Standard – bestes Verhältnis von Größe zu Sicherheit), aggressive (maximale Kompression, kann das Rendering filterlastiger SVGs verändern).
curl -X POST https://jinero.online/api/v1/svg/optimize \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
  "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>",
  "preset": "aggressive"
}
JSON
const r = await fetch("https://jinero.online/api/v1/svg/optimize", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ svg: source, preset: "aggressive" }),
});
const data = await r.json();
console.log(`-${data.savings_percent}%`);
$res = Http::post("https://jinero.online/api/v1/svg/optimize", [
    "svg" => $svgSource,
    "preset" => "balanced",
]);
$optimized = $res->json("output");
Beispielantwort
{
  "success": true,
  "preset": "aggressive",
  "output": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>",
  "original_size": 132,
  "optimized_size": 70,
  "savings_bytes": 62,
  "savings_percent": 46.97
}

Verpackt ein Bild als data:-URI, die du direkt in CSS background-image, HTML src oder SVG href einsetzen kannst. Akzeptiert rohen SVG-Text, eine hochgeladene Datei (svg/png/jpg/gif/webp) oder eine URL zum Abrufen.

POST https://jinero.online/api/v1/svg/to-datauri
ParameterTypBeschreibung
svg string Roher SVG-Text. Nicht mit image/url kombinierbar.
image Datei (multipart) Lade eine svg/png/jpg/gif/webp-Datei hoch. Max. 5 MB.
url string Öffentliche Bild-URL zum Abrufen. Max. 2048 Zeichen.
options.encoding string utf8 (Standard für SVG, kürzer in CSS) oder base64 (Standard für Rasterbilder).
options.quotes string single oder double (Standard) – bestimmt, wie Anführungszeichen von Attributen innerhalb der Data-URI maskiert werden.
# Option 1: raw SVG text
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
  -H "Content-Type: application/json" \
  -d '{"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>"}'

# Option 2: file upload
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
  -F "[email protected]"

# Option 3: URL fetch
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/icon.png"}'
// Inline SVG → CSS data URI
const r = await fetch("https://jinero.online/api/v1/svg/to-datauri", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    svg: svgSource,
    options: { encoding: "utf8", quotes: "double" },
  }),
});
const { data_uri, css } = await r.json();
// data_uri  → use anywhere
// css       → background-image: url("…");
Beispielantwort
{
  "success": true,
  "data_uri": "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"%3E%3Ccircle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/%3E%3C/svg%3E",
  "css": "background-image: url(\"data:image/svg+xml,…\")",
  "mime": "image/svg+xml",
  "encoding": "utf8",
  "input_size": 132,
  "output_size": 187
}

Liefert die verfügbaren Presets samt kurzer, verständlicher Beschreibung – praktisch, um Einstellungsoberflächen zu befüllen.

GET https://jinero.online/api/v1/svg/presets
curl https://jinero.online/api/v1/svg/presets
const r = await fetch("https://jinero.online/api/v1/svg/presets");
const { presets } = await r.json();
Beispielantwort
{
  "presets": [
    { "key": "safe",       "name": "Safe",       "description": "Minimal optimization, preserves most attributes" },
    { "key": "balanced",   "name": "Balanced",   "description": "Good compression with minimal visual changes" },
    { "key": "aggressive", "name": "Aggressive", "description": "Maximum compression, may affect some SVG features" }
  ]
}

Standard-HTTP-Semantik. Fehler liefern JSON mit dem Feld "message".

// 422 — validation (oversized SVG, unknown preset, invalid URL)
{ "message": "The preset field must be one of: safe, balanced, aggressive." }

// 422 — input missing on /to-datauri
{ "message": "Provide one of: svg (text), image (file), or url" }

// 422 — SVGO crashed on malformed markup
{ "message": "Invalid SVG: unexpected end of input" }

// 429 — rate limit exceeded
{ "message": "Too Many Attempts." }

Über die SVG API von jinero.online

Kostenlose REST-API für SVG-Optimierung und Data-URI-Kodierung – dieselbe SVGO-Engine wie überall, dazu ein einheitlicher to-datauri-Endpunkt, der Text, Dateien oder URLs akzeptiert.

SVGO unter der Haube

Der Optimierer ist SVGO mit drei sorgfältig abgestimmten Preset-Profilen – dieselbe Engine wie bei der beliebten Website SVGOMG, verfügbar als REST-API.

Drei Eingaben, ein Endpunkt

/svg/to-datauri akzeptiert rohes Markup, einen Datei-Upload oder eine URL zum Abrufen – nimm einfach, was zu deiner Anfrage passt.

CSS-fertige Ausgabe

Antworten mit Data-URI enthalten ein vorformatiertes CSS-Snippet, sodass du das Ergebnis ohne Maskieren direkt in ein Stylesheet einfügen kannst.

Keine Dateispeicherung

Die Optimierung läuft komplett im Arbeitsspeicher. Hochgeladene Dateien werden gelöscht, sobald die Antwort erstellt ist – hinterher musst du nichts aufräumen.

Häufig gestellte Fragen

Nein. Die SVG API ist öffentlich, das Rate-Limit gilt pro IP – 30 Anfragen/Minute für /optimize und /to-datauri, 60 für /presets.

"balanced" ist die richtige Standardwahl – es entfernt Metadaten, reduziert die Zahlengenauigkeit und fasst Transformationen zusammen, verändert aber nie das Rendering. Nutze "aggressive" nur, wenn du das SVG selbst kontrollierst und das Ergebnis visuell verglichen hast, denn es kann Filterprimitive entfernen und Pfade zusammenführen.

Für SVGs ist utf8 (URL-kodiert) kürzer und CSS-freundlich – deshalb ist es der Standard. Für Binärformate wie PNG, JPG oder WebP ist base64 die einzige Option, und wir wenden es automatisch an.

SVG-Markup: 500.000 Zeichen (~500 KB). Datei-Uploads (Feld image): 5 MB. Abruf per URL: keine feste Obergrenze für die entfernte Datei, aber wir brechen ab, wenn die Antwort 5 MB überschreitet.

Mit den Presets "safe" und "balanced" ja – das Ergebnis wird in modernen Browsern identisch dargestellt. "aggressive" kann Filterprimitive verwerfen, ähnliche Pfade zusammenführen und Koordinaten stärker runden, was das Rendering filterbasierter SVGs beeinflussen kann. Prüf nach einem Preset-Wechsel immer die Vorschau.