Lire un QR code depuis une image
Il n’est pas toujours possible de scanner un QR code avec la caméra : il est sur votre écran, dans un e-mail ou sur un document reçu. Cet outil le lit à partir d’une image ou d’une capture et affiche en clair ce qu’il contient — lien, texte, contact — prêt à copier.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Quand la caméra ne suffit pas
Scanner un QR code suppose de l’avoir sous les yeux, sur un support physique. Or beaucoup de codes arrivent déjà sous forme d’image : une pièce jointe, une capture d’écran, un visuel sur une page web, un billet en PDF. Impossible de viser un écran avec le même écran. Ici, vous déposez le fichier et le contenu du code est extrait et affiché, sans passer par un second téléphone ni par une application à installer.
Vérifier avant de cliquer
Lire un QR code dans une image permet aussi de voir où il mène avant d’ouvrir quoi que ce soit. Un code reçu par message peut cacher un lien douteux ; en le décodant ici, vous lisez l’adresse en toutes lettres et jugez sur pièce. C’est une précaution simple face aux QR codes frauduleux collés dans l’espace public ou glissés dans un e-mail, dont l’apparence ne dit rien de la destination réelle.
Rien ne quitte votre navigateur
La lecture s’effectue dans votre navigateur : l’image que vous déposez n’est envoyée sur aucun serveur, et le contenu décodé reste sur la page. C’est gratuit, illimité et sans inscription. Pour décoder des images en série ou intégrer cette lecture à un traitement automatique, la même fonction est disponible par API et par d’autres canaux, à $0.002 la requête plus $0.005 par image, en dollars US.
Cas d’usage
QR code reçu par e-mail
Thomas Rousseau décode une pièce jointe pour vérifier le lien avant de l’ouvrir sur son ordinateur.
Capture d’écran d’un billet
Sophie Nguyen lit le QR code d’un billet enregistré en image, pour en récupérer la référence.
Affiche photographiée
Un bénévole extrait l’adresse d’un QR code pris en photo dans la rue, sans le rescanner.
Contrôle anti-fraude
Nadia Benali vérifie la destination d’un QR code douteux avant tout clic, en le décodant à partir de la photo.
Questions fréquentes
Quels fichiers puis-je déposer ?
Les images courantes — PNG, JPEG — ainsi que les captures d’écran, et le plus souvent une page de PDF contenant le code. Le contenu décodé s’affiche en clair, prêt à copier.
L’image est-elle envoyée sur vos serveurs ?
Non. La lecture se fait dans votre navigateur : ni l’image ni le contenu décodé ne quittent la page. Rien n’est transmis ni conservé.
Pourquoi décoder un QR code plutôt que le scanner ?
Parce qu’il est déjà sur votre écran ou dans un fichier, hors de portée de la caméra. Et parce que lire l’adresse avant de cliquer permet d’écarter un lien piégé.
Est-ce fiable si l’image est de mauvaise qualité ?
Un code net et bien cadré se lit sans peine. Une image très floue, trop sombre ou fortement compressée peut échouer ; recadrez ou augmentez le contraste et réessayez.
Est-ce gratuit ?
Oui, dans le navigateur : gratuit, illimité, sans inscription. Seule la lecture automatisée par API est facturée, à $0.002 la requête plus $0.005 par image, en dollars US.
Puis-je lire un QR code caché dans un PDF ?
Le plus souvent oui, en déposant la page concernée. L’outil y repère le motif et en extrait le contenu comme sur une image classique.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/qr-decode \
-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-decode", {
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-decode",
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-decode", 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-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"image": "https://ejemplo.com/imagen.jpg"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.qr_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |