Recadrer une image dans une zone
Recadrer une image paraît simple jusqu’à ce qu’un traitement automatisé reçoive des coordonnées qui dépassent la source d’un pixel.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Ce validateur accepte la largeur et la hauteur de l’image source ainsi qu’une zone définie par x, y, sa largeur et sa hauteur. Il contrôle chaque valeur, vérifie que le rectangle entier reste dans l’image et renvoie les dimensions recadrées lorsque la zone est valide. Aucun transfert ni décodage d’image n’est nécessaire. Vous pouvez donc l’utiliser avant un processeur graphique, pour un aperçu de recadrage ou pour accepter les coordonnées d’un autre service.
Décrivez l’image source et la zone
Commencez par les dimensions en pixels de l’image d’origine. Indiquez dans image_width le nombre total de pixels horizontaux et dans image_height le nombre total de pixels verticaux. Décrivez ensuite le rectangle avec x, y, width et height. Les valeurs x et y placent son coin supérieur gauche par rapport à celui de l’image, situé en 0,0. Width s’étend vers la droite et height vers le bas. Les six valeurs doivent être des nombres entiers, car cette capacité traite un recadrage matriciel aligné sur les pixels, et non une géométrie fractionnaire. Les dimensions de l’image et de la zone doivent être positives, tandis que x et y peuvent valoir zéro. Par exemple, x égal à 240 ignore les 240 premières colonnes de pixels. Une zone peut toucher exactement chaque bord : x plus width peut donc égaler image_width, et y plus height peut égaler image_height. Utilisez les mesures du fichier réellement recadré ; les coordonnées d’un aperçu redimensionné doivent d’abord être remises à l’échelle.
Comprenez la validation des limites
Le validateur refuse d’abord les valeurs absentes, les nombres non entiers, les coordonnées négatives, les zones sans surface et les valeurs hors de la plage documentée. Il contrôle ensuite les deux frontières qui déterminent l’inclusion. Horizontalement, x plus width doit être inférieur ou égal à image_width. Verticalement, y plus height doit être inférieur ou égal à image_height. Si une somme est supérieure, une partie du recadrage sort de la source et la requête renvoie une erreur d’entrée non valide. Cette règle évite une confusion fréquente d’une unité : une zone large de 100 pixels commençant à x 0 occupe bien une étendue complète de 100 pixels et tient exactement dans une image large de 100 pixels. La capacité ne contraint, ne déplace et ne réduit jamais une zone incorrecte, car une modification silencieuse peut sélectionner un autre sujet ou modifier la composition. Elle n’analyse pas non plus les octets de l’image. Sa décision dépend uniquement des dimensions et coordonnées fournies, pour un résultat rapide, reproductible et adapté aux formulaires comme aux traitements automatisés.
Exploitez le résultat avant le recadrage réel
Une réponse réussie renvoie la largeur et la hauteur du recadrage obtenu. Elles correspondent à la zone demandée puisque cette capacité valide la géométrie sans rééchantillonner ni modifier le rectangle. Servez-vous de la réponse comme garde-fou avant de transmettre les mêmes coordonnées à une bibliothèque graphique, un service multimédia ou une tâche de rendu en attente. Vous séparez ainsi une validation peu coûteuse du décodage plus lourd et empêchez des erreurs prévisibles d’atteindre les traitements suivants. Dans un éditeur, validez après confirmation de la sélection ou après conversion des coordonnées de l’aperçu en pixels de l’original. Dans un pipeline, contrôlez les métadonnées dès leur réception et orientez les enregistrements incorrects vers une correction. Tenez compte de l’orientation : si une autre étape fait pivoter physiquement l’image, employez les dimensions après rotation et des coordonnées exprimées dans la même orientation. La requête API coûte $0.002 ; l’exécuteur du navigateur réalise localement le même calcul déterministe. Aucun des deux parcours ne transfère l’image.
Cas d’usage
Protéger une file de traitement
Refusez les métadonnées hors limites avant qu’un processus télécharge et décode l’image source.
Valider une sélection de recadrage
Vérifiez que les coordonnées converties depuis un aperçu tiennent encore dans l’image d’origine.
Contrôler des métadonnées importées
Auditez les rectangles enregistrés et repérez ceux qui ne peuvent pas être appliqués aux ressources associées.
Questions fréquentes
Cette capacité recadre-t-elle ou transfère-t-elle l’image ?
Non. Elle valide uniquement des dimensions et coordonnées numériques, puis renvoie la taille qu’aurait le recadrage.
La zone peut-elle toucher le bord droit ou inférieur ?
Oui. Elle est valide si x plus width égale image_width ou si y plus height égale image_height.
Les coordonnées fractionnaires sont-elles acceptées ?
Non. Toutes les dimensions et coordonnées doivent être entières afin de rester alignées sur les pixels.
Une zone hors limites est-elle corrigée automatiquement ?
Non. La requête renvoie une erreur d’entrée non valide au lieu de modifier la zone demandée.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. La même validation déterministe est aussi disponible dans le navigateur.
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/crop-to-box \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}'const res = await fetch("https://api.kit.forhosting.com/image/crop-to-box", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/crop-to-box",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/crop-to-box", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image_width":1920,"image_height":1080,"x":240,"y":120,"width":800,"height":600}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/crop-to-box", 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_width": 1920,
"image_height": 1080,
"x": 240,
"y": 120,
"width": 800,
"height": 600
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.crop_to_box",
"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. |