QR-Code mit Logo versehen: So bleibt er trotzdem lesbar
Diese Funktion setzt Ihr eigenes Logo in die Mitte eines QR-Codes, ohne die Scanbarkeit zu gefährden: Die Fehlerkorrektur wird automatisch erhöht, sodass handelsübliche Smartphone-Kameras den Code trotz der Überdeckung im Zentrum weiterhin zuverlässig erkennen, auch bei kleinerem Druckformat.
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Warum ein Logo den Code nicht unlesbar macht
Ein QR-Code trägt deutlich mehr Fehlerkorrektur-Information, als für die reine Kodierung nötig wäre. Diese Reserve erlaubt es, einen kleinen Bereich in der Mitte mit einem Logo zu überdecken, ohne dass der Code seine Lesbarkeit verliert. Die Funktion wählt automatisch eine ausreichend hohe Fehlerkorrekturstufe und begrenzt die Logogröße auf einen Anteil, bei dem das Scannen zuverlässig bleibt.
Welche Logoformate funktionieren
Unterstützt werden gängige Bildformate wie PNG mit transparentem Hintergrund, JPG und SVG; ein PNG mit Transparenz liefert in der Regel das sauberste Ergebnis, da es sich ohne sichtbaren weißen Rahmen in den Code einfügt. Ein sehr detailreiches Logo mit vielen feinen Linien wird im kleinen Format des QR-Codes weniger klar erkennbar als eine einfache, kontrastreiche Bildmarke.
Testen vor dem Druck
Vor dem Druck auf größeren Stückzahlen lohnt sich ein Testscan mit mehreren unterschiedlichen Smartphones, da Kameraqualität und Scan-App-Software leicht variieren. Ein Code, der auf einem aktuellen Gerät sofort erkannt wird, sollte dasselbe auch auf einem älteren oder günstigeren Modell schaffen, bevor die Vorlage in den Druck geht.
Kostenlos im Browser, mit API-Option
Die Erstellung im Browser ist kostenlos und ohne Anmeldung; Ihre Logodatei verlässt dabei den Browser nicht. Für die automatisierte Erzeugung vieler Logo-QR-Codes, etwa für eine ganze Produktreihe, steht zusätzlich ein programmierbarer Aufruf über die API zur Verfügung, mit $0.002 pro Anfrage zuzüglich $0.005 pro erzeugtem Bild.
Anwendungsfälle
Visitenkarte mit Firmenlogo
Sabine Schneider lässt auf ihrer neuen Visitenkarte einen QR-Code mit dem Logo ihres Unternehmens in der Mitte drucken, der direkt zu ihrem Kontaktprofil führt.
Plakat mit Wiedererkennungswert
Eine Marketingagentur setzt bei einem Kampagnenplakat das Kundenlogo in die Mitte des QR-Codes, damit der Code auch aus der Ferne als Teil der Marke erkennbar bleibt.
Verpackung mit markenkonformem Code
Die Weber Metallbau GmbH bringt auf der Produktverpackung einen QR-Code mit dem eigenen Firmenlogo an, der zur Montageanleitung führt, statt eines anonymen schwarz-weißen Standardcodes.
Häufige Fragen
Wird der Code durch das Logo unleserlich?
Nicht bei korrekter Größe: Die Funktion erhöht automatisch die Fehlerkorrektur, sodass der Code trotz Logo scanbar bleibt. Ein Testscan vor dem Druck bleibt trotzdem empfehlenswert.
Wie groß darf das Logo maximal sein?
In der Regel bis etwa 20 bis 25 Prozent der Codefläche, abhängig von der gewählten Fehlerkorrekturstufe; die Funktion begrenzt das automatisch auf einen sicheren Wert.
Ist die Nutzung im Browser kostenlos?
Im Browser ja, ohne Einschränkung und ohne Registrierung. Wer die Erstellung stattdessen automatisiert über die API anstößt, zahlt $0.002 pro Anfrage zuzüglich $0.005 pro Bild.
Verlässt mein Logo den Browser?
Nein, bei der Nutzung auf dieser Seite bleibt die Logodatei im Browser.
Unterstützt die Funktion transparente Logos?
Ja, ein PNG mit transparentem Hintergrund fügt sich ohne sichtbaren Rahmen in den Code ein.
Kann ich zusätzlich das Ziel des Codes dynamisch ändern?
Dafür eignet sich der dynamische QR-Code besser; diese Funktion kombiniert das Logo mit einer fest kodierten Zieladresse.
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/dev/qr-logo \
-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/dev/qr-logo", {
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/dev/qr-logo",
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/dev/qr-logo", 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/dev/qr-logo", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"image": "https://ejemplo.com/imagen.jpg"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.qr_logo",
"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.
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. |