Convertissez des pixels RGB en gris par luminance
Transformez des valeurs de rouge, vert et bleu en un gris fidèle à la perception de la luminosité par l'œil : le rouge pur donne 76, le vert pur 150 et le bleu pur 29, tandis qu'un gris neutre de 128 reste à 128. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Convertissez les échantillons RGB d’une image en niveaux de gris sans téléverser de fichier ni utiliser de décodeur. Fournissez un tableau ordonné de pixels avec leurs canaux rouge, vert et bleu ; vous recevez autant de pixels dont les trois canaux portent la valeur grise pondérée par luminance. Le calcul privilégie le vert, puis le rouge et le bleu afin de mieux représenter la luminosité perçue qu’une moyenne simple. Chaque canal est contrôlé : pixel incomplet, valeur non numérique ou hors de 0 à 255 provoque une erreur explicite.
Préparez des enregistrements RGB complets
Ce champ doit être un tableau non vide dont chaque élément est un objet portant les noms canoniques r, g et b. Les canaux peuvent être entiers ou décimaux, mais doivent être finis et compris entre 0 et 255 inclus. Le convertisseur exige chaque canal.
Il ne suppose jamais zéro, ne copie aucun canal et n’ignore aucun pixel, car cela modifierait la luminosité et la correspondance des positions. Conservez l’ordre initial : la sortie le respecte pour reconstruire un tampon, une matrice ou un jeu de test. Une requête accepte cent mille échantillons au maximum ; découpez les images plus grandes en blocs déterministes.
Cette interface traite des échantillons décodés, pas des octets PNG, JPEG ou WebP.
Comprenez le calcul pondéré
Pour chaque échantillon, le gris est l’entier le plus proche de 0.299 fois le rouge plus 0.587 fois le vert plus 0.114 fois le bleu. Ces coefficients totalisent un, préservent les pixels neutres et traduisent la sensibilité visuelle supérieure au vert. Une moyenne simple peut rendre le bleu trop clair et le vert trop sombre.
Après un seul arrondi, la valeur est inscrite dans r, g et b afin de produire un gris RGB neutre. La réponse fournit aussi le nombre et la formule pour faciliter les contrôles. La fonction est pure : aucun réseau, hasard, horloge, modèle externe ou état mutable.
Une entrée identique donne donc toujours une sortie identique. Elle ne linéarise pas le gamma, ne gère pas les profils ICC ou HDR, ne conserve pas l’alpha et n’applique pas de tramage.
Intégrez le résultat en toute sécurité
Utilisez samples comme remplacement positionnel du tableau envoyé. Chaque enregistrement conservant trois canaux, les consommateurs RGB ordinaires peuvent le lire sans format spécialisé. Comparez count au nombre transmis avant de reconstruire lignes, tuiles ou rasters.
Largeur, hauteur, pas de ligne, orientation, alpha et métadonnées restent sous votre responsabilité. Gardez l’alpha séparément puis recombinez-le lors de l’encodage. Considérez les erreurs de canal manquant, nombre non fini, plage ou taille comme des défauts de données, non comme des incidents à réessayer.
Testez noir, blanc, couleurs primaires, gris neutre, décimales et échantillon incomplet.
Cas d’usage
Construire des tampons en niveaux de gris
Convertissez les échantillons RGB décodés puis replacez-les dans le raster avant encodage.
Questions fréquentes
Quelle formule de gris est appliquée ?
Chaque résultat vaut round(0.299 × r + 0.587 × g + 0.114 × b), puis cette valeur remplit les trois canaux.
Ce service accepte-t-il un fichier image ?
Non. Il reçoit des échantillons RGB déjà décodés ; effectuez décodage et encodage en dehors du service.
La transparence est-elle conservée ?
L’alpha ne fait pas partie du contrat. Gardez-le à part puis réunissez-le avec les canaux convertis.
Pourquoi le bleu pur devient-il bien plus sombre que le vert pur ?
Parce que l'œil perçoit le vert comme bien plus lumineux que le bleu, et la formule donne au vert un poids de 0,587 contre 0,114 pour le bleu. Le vert pur passe à 150, le rouge pur à 76 et le bleu pur à 29.
Que se passe-t-il s'il manque une couleur à un pixel ?
La conversion s'arrête et indique quel pixel et quel canal manquent. Elle ne suppose jamais que la valeur absente vaut zéro et ne copie pas un autre canal, car cela fausserait la luminosité et l'ordre des pixels.
Outils associés
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/grayscale-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}'const res = await fetch("https://api.kit.forhosting.com/image/grayscale-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/grayscale-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/grayscale-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"samples":[{"r":255,"g":0,"b":0},{"r":0,"g":128,"b":255}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/grayscale-convert", 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
{
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.grayscale_convert",
"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_samples | 100000 |
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. |
Notes techniques
Préparez des enregistrements RGB complets
Placez les pixels dans le champ JSON samples. Si le vert manque, par exemple, invalid_input indique l’indice et le canal absent.
Intégrez le résultat en toute sécurité
L’exécuteur web partage la même fonction déterministe que l’API. Le navigateur est gratuit et une requête API coûte $0.002.
Cas d'intégration
Créer des fixtures déterministes
Produisez des valeurs attendues exactes pour tester filtres, canvas et traitements de pixels.
Contrôler de petits lots
Collez quelques valeurs RGB dans le navigateur avant d’automatiser le flux par API.
Questions techniques
Que se passe-t-il si un canal manque ?
La requête échoue avec invalid_input et précise l’indice commençant à zéro ainsi que le canal r, g ou b absent.
Quel est le prix d’une requête API ?
Une requête coûte $0.002 ; vous pouvez aussi exécuter gratuitement la même conversion dans le navigateur.