Convierta píxeles RGB a escala de grises por luminancia
Convierta valores de rojo, verde y azul en un gris fiel a cómo el ojo percibe el brillo: el rojo puro queda en 76, el verde puro en 150 y el azul puro en 29, mientras que un gris neutro de 128 sigue en 128. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Convierta muestras RGB de una imagen a escala de grises sin cargar un archivo ni depender de un decodificador. Envíe una matriz ordenada de píxeles con canales rojo, verde y azul y reciba la misma cantidad con los tres canales fijados al gris ponderado por luminancia. El cálculo da más peso al verde, después al rojo y por último al azul para representar mejor el brillo percibido. Cada canal se valida: los píxeles incompletos, valores no numéricos o valores fuera de 0 a 255 producen un error claro.
Prepare registros RGB completos
Debe ser una matriz no vacía y cada elemento debe ser un objeto con los nombres canónicos r, g y b. Los canales pueden ser enteros o decimales, pero deben ser finitos y estar entre 0 y 255, ambos inclusive. El conversor exige todos los canales en cada registro.
Nunca supone cero, copia otro canal ni omite un píxel, porque eso alteraría el brillo y la relación posicional. Mantenga el orden original: la salida lo conserva para reconstruir un búfer, matriz o prueba. Se admiten hasta cien mil muestras; divida imágenes mayores en bloques deterministas.
Esta interfaz procesa muestras ya decodificadas, no bytes PNG, JPEG o WebP.
Comprenda el cálculo ponderado
Para cada muestra, el gris es el entero más cercano a 0.299 por rojo más 0.587 por verde más 0.114 por azul. Los coeficientes suman uno, conservan neutros los píxeles neutros y reflejan que la visión percibe el verde como más luminoso. Una media simple puede aclarar demasiado el azul y oscurecer el verde.
Tras una sola operación de redondeo, el valor se escribe en r, g y b, formando un gris RGB sin dominante. La respuesta incluye el recuento y la fórmula para que los registros sean verificables. La función es pura: no usa red, azar, hora, modelos externos ni estado mutable, por lo que la misma entrada siempre genera la misma salida.
No aplica perfiles ICC, gamma lineal, HDR, alfa ni tramado; esos pasos corresponden a un flujo especializado.
Integre el resultado con seguridad
Use samples como sustitución posicional de la matriz enviada. Como cada registro conserva tres canales, cualquier consumidor de RGB puede recibirlo sin un formato especial. Compare count con la cantidad enviada antes de reconstruir filas, mosaicos o rásteres.
El ancho, alto, paso de fila, orientación, alfa y metadatos siguen siendo responsabilidad de quien llama. Conserve el alfa aparte y vuelva a combinarlo al codificar. Trate los errores de canal ausente, número no finito, rango o tamaño como problemas de datos, no como fallos reintentables.
Pruebe negro, blanco, colores primarios, un gris neutro, decimales y una muestra incompleta para detectar cambios de pesos, redondeo u orden.
Qué puede hacer con ella
Construir búferes en escala de grises
Convierta muestras RGB decodificadas y vuelva a situarlas en el ráster original antes de codificar.
Preguntas frecuentes
¿Qué fórmula de gris se utiliza?
Cada resultado es round(0.299 × r + 0.587 × g + 0.114 × b), asignado después a los tres canales.
¿Acepta un archivo de imagen?
No. Recibe muestras RGB ya decodificadas; decodifique y vuelva a codificar fuera del servicio.
¿Conserva la transparencia?
El alfa queda fuera del contrato. Consérvelo aparte y combínelo con los canales convertidos.
¿Por qué el azul puro queda mucho más oscuro que el verde puro?
Porque el ojo percibe el verde mucho más brillante que el azul, y la fórmula le da al verde un peso de 0,587 y al azul solo 0,114. El verde puro pasa a 150, el rojo puro a 76 y el azul puro a 29.
¿Qué ocurre si a un píxel le falta uno de sus colores?
La conversión se detiene e indica qué píxel y qué canal faltan. Nunca supone que el valor que falta es cero ni copia otro canal, porque eso cambiaría el brillo y rompería el orden de los píxeles.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.grayscale_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_samples | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Prepare registros RGB completos
Envíe los píxeles en el campo JSON samples. Si falta el verde, por ejemplo, devuelve invalid_input con el índice y el canal ausente.
Integre el resultado con seguridad
El ejecutor del navegador comparte la misma función determinista con la API. El navegador es gratuito y cada solicitud API cuesta $0.002.
Casos de integración
Crear fixtures deterministas
Genere valores esperados exactos para pruebas de filtros, lienzos y procesos de píxeles.
Revisar lotes pequeños
Pegue valores RGB representativos en el navegador antes de automatizar el proceso por API.
Preguntas técnicas
¿Qué ocurre si falta un canal?
La solicitud falla con invalid_input e identifica el índice desde cero y el canal r, g o b ausente.
¿Cuánto cuesta una solicitud API?
Una solicitud cuesta $0.002; también puede ejecutar gratis la misma conversión en el navegador.