Bildcollage-Layout mit Zellpositionen erstellen
Der Rechner für Bildcollage-Layouts wandelt eine zeilenweise geordnete Liste von Bildmaßen in eine vollständige Rastergeometrie um.
Im Browser ausführen – kostenlos
Er ermittelt die erforderliche Breite jeder Spalte und die Höhe jeder Zeile und gibt anschließend die Größe der Collage-Fläche sowie das genaue Rechteck jeder Zelle zurück. Mit dem Ergebnis platzieren Sie Bilder präzise in HTML, canvas, SVG, Designwerkzeugen oder Verarbeitungspipelines, ohne Versätze manuell zu addieren oder überlappende Zellen zu riskieren.
Bereiten Sie die Maße zeilenweise vor
Geben Sie für jedes Bild ein Paar aus Breite und Höhe an: zunächst von links nach rechts in der ersten Zeile, danach ebenso in allen folgenden Zeilen. Die Felder rows und cols bestimmen die Rasterform; ihr Produkt muss daher genau der Anzahl der Bilddatensätze entsprechen. Diese strenge Prüfung verhindert einen typischen Collage-Fehler: Eine Zelle bleibt unbesetzt oder ein zusätzliches Bild wird verworfen, weil die geplante Form nicht zur Quellliste passt. Breiten und Höhen müssen positive, endliche Zahlen sein. Ganze Zahlen und Dezimalwerte sind zulässig, sodass Sie Pixel, Punkt, Millimeter oder eine andere einheitliche Maßeinheit verwenden können. Mischen Sie innerhalb einer Anfrage keine Einheiten, da der Algorithmus alle Zahlen als Bestandteile desselben Koordinatensystems behandelt. Die Antwort enthält neben jeder berechneten Zelle weiterhin die ursprüngliche Breite und Höhe. So können Sie den Eintrag eindeutig dem Quellbild zuordnen und später entscheiden, wie das Bild eingepasst, zugeschnitten oder ausgerichtet werden soll.
Verstehen Sie die Berechnung der Zellgrößen
Jede Spalte erhält die größte Quellbreite, die in dieser Spalte vorkommt, und jede Zeile die größte Höhe ihrer Bilder. Eine Zelle am jeweiligen Schnittpunkt verwendet somit die Spaltenbreite und die Zeilenhöhe. Dadurch bleiben die Rastergrenzen ausgerichtet, während jedes Quellbild in Originalgröße in seine Zelle passt. Der Rechner bildet die x-Versätze durch Addition aller vorherigen Spaltenbreiten und die y-Versätze durch Addition aller vorherigen Zeilenhöhen. Die erste Zelle beginnt bei null, null. Die gesamte Collage-Breite ist die Summe der Spaltenbreiten; die gesamte Höhe ist die Summe der Zeilenhöhen. Dieses Verfahren erzeugt ein kompaktes rechteckiges Raster, ohne eine Zielgröße oder Skalierungsregel zu erfinden. Es berechnet ausschließlich die Geometrie und streckt, beschneidet, dreht oder zentriert keine Bilder. Diese Darstellungsentscheidungen treffen Sie anschließend anhand des zurückgegebenen Zellrechtecks und der bewahrten Originalmaße.
Nutzen Sie das Ergebnis in Ihrer Rendering-Pipeline
Lesen Sie das Array cells in derselben Reihenfolge wie die Eingabebilder. Jeder Eintrag enthält seinen nullbasierten Index, Zeile und Spalte, den x- und y-Ursprung, Breite und Höhe der Zelle sowie die ursprünglichen Bildmaße. Ein canvas-Renderer kann in jedes zurückgegebene Rechteck zeichnen; ein CSS-Generator kann column_widths und row_heights in explizite Rasterspuren umwandeln; ein SVG-Generator kann vor dem Einfügen der Bilder passende Beschneidungsrechtecke erzeugen. Da die Ausgabe deterministisch ist und keine umgebungsabhängigen Werte enthält, liefert dieselbe Anfrage im Browser, in einem Build-Prozess und über die API identische Geometrie. Zum Zentrieren ohne Skalierung ziehen Sie die Originalmaße von den Zellmaßen ab und halbieren beide Differenzen. Für cover- oder contain-Verhalten berechnen Sie den Maßstab aus den Seitenverhältnissen. Die Trennung dieser Regeln hält die Layoutberechnung nachvollziehbar, prüfbar und vielseitig einsetzbar.
Anwendungsfälle
Erstellen Sie eine Collage auf canvas
Berechnen Sie überlappungsfreie Zielrechtecke, bevor Sie verschieden große Bilder auf eine gemeinsame Fläche zeichnen.
Erzeugen Sie explizite CSS-Grid-Spuren
Wandeln Sie die ausgegebenen Breiten und Höhen in eine Rastervorlage um, die zum größten Bild jeder Spur passt.
Planen Sie einen SVG-Kontaktbogen
Erzeugen Sie Zellen und die gesamte viewBox, bevor Sie Bilder, Beschriftungen, Beschneidungspfade oder Rahmen ergänzen.
Häufige Fragen
Was kostet die Nutzung?
Jede API-Anfrage kostet $0.002. Die Berechnung kann außerdem im Browser ausgeführt werden.
Wie wird die Breite einer Spalte bestimmt?
Eine Spalte verwendet die größte Quellbreite der Bilder, die dieser Spalte zugeordnet sind.
Wie wird die Höhe einer Zeile bestimmt?
Eine Zeile verwendet die größte Quellhöhe der Bilder, die dieser Zeile zugeordnet sind.
Skaliert oder beschneidet der Rechner die Bilder?
Nein. Er berechnet die Geometrie und bewahrt die Quellmaße. Skalierung, Zuschnitt, Zentrierung und Ausrichtung erfolgen beim Rendering.
Was geschieht bei einer unpassenden Bildanzahl?
Die Anfrage schlägt mit einem Fehler für ungültige Eingaben fehl, der verlangt, dass die Anzahl rows multipliziert mit cols entspricht.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/image/collage-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"images":[{"width":640,"height":480},{"width":800,"height":600},{"width":500,"height":700},{"width":720,"height":540}],"rows":2,"cols":2}'const res = await fetch("https://api.kit.forhosting.com/image/collage-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"images": [
{
"width": 640,
"height": 480
},
{
"width": 800,
"height": 600
},
{
"width": 500,
"height": 700
},
{
"width": 720,
"height": 540
}
],
"rows": 2,
"cols": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/collage-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"images": [
{
"width": 640,
"height": 480
},
{
"width": 800,
"height": 600
},
{
"width": 500,
"height": 700
},
{
"width": 720,
"height": 540
}
],
"rows": 2,
"cols": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/collage-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"images":[{"width":640,"height":480},{"width":800,"height":600},{"width":500,"height":700},{"width":720,"height":540}],"rows":2,"cols":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"images":[{"width":640,"height":480},{"width":800,"height":600},{"width":500,"height":700},{"width":720,"height":540}],"rows":2,"cols":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/collage-layout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"images": [
{
"width": 640,
"height": 480
},
{
"width": 800,
"height": 600
},
{
"width": 500,
"height": 700
},
{
"width": 720,
"height": 540
}
],
"rows": 2,
"cols": 2
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.collage_layout",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_mb | 15 |
max_megapixels | 12 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |