Créez une comparaison d’images avant et après
Créez une mise en page précise pour comparer des images avant et après sans estimer les coordonnées dans le code de l’interface.
Lancer gratuitement
Indiquez les dimensions en pixels des deux images, choisissez une présentation côte à côte ou une superposition avec curseur, puis obtenez le canevas, les rectangles, les zones de découpe et la position du séparateur vertical sous forme de données structurées. Des dimensions identiques sont attendues, car une comparaison visuelle fiable exige un contenu aligné. Si vos sources diffèrent, vous pouvez demander explicitement une instruction qui redimensionne l’image finale selon l’image initiale.
Choisissez le format de comparaison adapté à votre récit
Une présentation avant-après répond à deux besoins de consultation distincts. Une mise en page comparative côte à côte conserve chaque image entièrement visible, ce qui convient lorsque le public doit parcourir toute la scène, confronter des zones éloignées ou voir le résultat sans interaction. Le canevas renvoyé mesure deux fois la largeur effective d’une image : le panneau initial se trouve à gauche, le panneau final à droite et un séparateur vertical occupe leur limite commune. La superposition avec curseur place plutôt les deux images dans le même repère. Ses rectangles de découpe complémentaires montrent l’image initiale à gauche du séparateur et l’image finale à droite. Les petites modifications deviennent ainsi plus faciles à repérer, car les éléments correspondants restent au même endroit pendant le déplacement du séparateur. Sélectionnez le mode selon le public et l’interface, puis utilisez directement les rectangles dans CSS, SVG, Canvas ou une couche de rendu native. Les coordonnées sont des pixels entiers ; aucune convention cachée ne doit être reconstituée en aval.
Traitez explicitement les dimensions différentes
Une comparaison fiable commence par des dimensions identiques. Si une image mesure 1200 par 800 pixels et l’autre 1000 par 800, les superposer sans transformation déclarée décale les détails correspondants et peut amplifier ou masquer une modification. La calculatrice refuse donc une largeur ou une hauteur différente, sauf si `resize_to_match` est activé. Avec cette option, l’image initiale devient la cible canonique et le résultat fournit les dimensions cibles de l’image finale ainsi que des facteurs d’échelle horizontale et verticale indépendants. Cette règle indique précisément au moteur de rendu la correction attendue et permet de détecter un étirement non uniforme. L’outil n’effectue pas le redimensionnement et ne choisit aucun recadrage. Si le respect des proportions est essentiel, préparez des sources correspondantes ou recadrez-les dans une chaîne de traitement avant de demander la mise en page. Lorsque les dimensions concordent déjà, l’objet de redimensionnement signale simplement qu’aucune adaptation n’est nécessaire. Les résultats gardent ainsi une structure prévisible, sans champs facultatifs nuls.
Transformez les données du séparateur en interface utilisable
Pour une superposition, indiquez un pourcentage de séparateur compris entre zéro et cent. La calculatrice le convertit au pixel le plus proche dans le canevas et renvoie deux découpes dont les largeurs totalisent toujours la largeur complète. À zéro pour cent, la découpe initiale est nulle et l’image finale apparaît entièrement ; à cent pour cent, la situation s’inverse. Le pourcentage inchangé est également renvoyé pour l’état de l’interface, les valeurs d’accessibilité, l’analyse ou un nouveau calcul après un redimensionnement adaptatif. En mode côte à côte, deux panneaux pleine largeur placent naturellement le séparateur au milieu du canevas combiné, quel que soit le pourcentage fourni. Utilisez l’orientation et la coordonnée x pour positionner une ligne, une poignée ou une commande utilisable au clavier. Un curseur prêt pour la production doit annoncer sa valeur aux technologies d’assistance, accepter les flèches et identifier chaque côté. Comme cette capacité renvoie de la géométrie et non du balisage, le même résultat déterministe peut alimenter un composant web, un visuel social, un aperçu de système de conception ou une application mobile.
Cas d’usage
Documenter une rénovation
Disposez des photos alignées d’une pièce dans deux panneaux complets ou dans un curseur de révélation interactif.
Présenter une retouche d’image
Produisez des découpes exactes pour illustrer retouche, restauration, étalonnage ou suppression d’arrière-plan.
Uniformiser les composants comparatifs
Fournissez aux rendus web et mobiles les mêmes canevas, rectangles, plan d’adaptation et séparateur déterministes.
Questions fréquentes
Combien coûte une requête API ?
Chaque requête API coûte $0.002. L’outil de cette page s’utilise gratuitement dans le navigateur.
Cet outil modifie-t-il ou téléverse-t-il mes images ?
Non. Il reçoit uniquement des dimensions et renvoie des coordonnées ; il ne lit, ne transfère, ne stocke et n’affiche aucun octet d’image.
Que se passe-t-il si les dimensions diffèrent ?
La requête renvoie une erreur de saisie invalide, sauf si resize_to_match vaut vrai. Une fois activée, l’option décrit comment adapter l’image finale aux dimensions de l’image initiale.
Comment le pixel du séparateur est-il calculé ?
La largeur est multipliée par le pourcentage demandé, divisée par 100, puis arrondie au pixel entier le plus proche.
Le pourcentage agit-il sur le mode côte à côte ?
Non. Ce mode affiche deux panneaux complets de même taille ; le séparateur reste donc à 50 pour cent du canevas combiné.
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/image/compare-before-after-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}'const res = await fetch("https://api.kit.forhosting.com/image/compare-before-after-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/compare-before-after-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/compare-before-after-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/compare-before-after-layout", 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
{
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.compare_before_after_layout",
"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.
Limites
max_mb | 15 |
max_megapixels | 12 |
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. |