Convertidor YIQ a RGB
Este convertidor de YIQ a RGB transforma la luminancia y los dos componentes de crominancia del modelo de color NTSC en valores prácticos de rojo, verde y azul.
Ejecutar — gratis
Aplica una matriz inversa fija, muestra canales normalizados y de 8 bits e indica cuándo fue necesario recortar un canal al intervalo RGB visible. La validación estricta detecta entradas ausentes, no numéricas, infinitas o fuera de dominio antes del cálculo. No utiliza la red y siempre produce el mismo resultado para los mismos componentes Y, I y Q.
Introduzca correctamente los componentes YIQ normalizados
Indique tres componentes numéricos: Y para luminancia, I para crominancia en fase y Q para crominancia en cuadratura. Y debe estar entre 0 y 1, I entre -0.5957 y 0.5957, y Q entre -0.5226 y 0.5226. Estos son límites YIQ NTSC normalizados, no valores en bytes ni porcentajes. Un valor Y próximo a cero representa poca luminancia; uno próximo a uno representa mucha luminancia. Los componentes I y Q, con signo, contienen la información de color alrededor de esa luminancia. Envíe números JSON reales, no cadenas numéricas, para que el contrato sea inequívoco en la API, los SDK y el formulario web. El convertidor rechaza valores ausentes, cadenas, valores semejantes a NaN, infinitos y números fuera de los intervalos declarados. Esta exigencia evita que un error de escritura o escala genere un color aparentemente razonable. Se aceptan alias como luminance, in_phase y quadrature, pero y, i y q son los campos canónicos.
Comprenda la matriz NTSC inversa y el recorte
El cálculo utiliza la transformación inversa fija R = Y + 0.956I + 0.621Q, G = Y - 0.272I - 0.647Q y B = Y - 1.106I + 1.703Q. Cada ecuación genera primero un canal normalizado sin recortar. Incluso componentes YIQ válidos pueden describir un color fuera del cubo RGB porque la región YIQ permitida no coincide con todas las combinaciones de rojo, verde y azul limitadas entre cero y uno. Por ello, cada salida bruta se recorta de forma independiente: un valor menor que cero pasa a cero y uno mayor que uno pasa a uno. El convertidor conserva los valores anteriores al recorte en unclamped_rgb e identifica cada canal afectado en clipped, de modo que la operación nunca queda oculta. Después multiplica cada componente normalizado recortado por 255 y redondea al entero más cercano para obtener canales habituales de 8 bits. Esos mismos canales se formatean como color hexadecimal de seis dígitos en minúsculas y como valor CSS rgb().
Interprete el resultado y úselo con seguridad
Utilice red, green y blue cuando una aplicación espere canales enteros separados; rgb cuando espere una matriz de tres elementos; hex para herramientas de diseño y selectores de color; o css para una declaración de estilos. normalized_rgb resulta útil en código gráfico que consume canales entre cero y uno. unclamped_rgb es un dato de diagnóstico, no un color directamente visible: muestra lo que produjo la matriz antes de limitar la gama. Consulte clipped cuando importe la fidelidad cromática. Un canal recortado significa que el punto YIQ solicitado queda fuera del RGB representable y que el color devuelto es el resultado más próximo mediante recorte independiente, no una representación reversible exacta. Esto importa al estudiar señales históricas de televisión, trasladar fórmulas de procesamiento de imágenes o comparar implementaciones con coeficientes diferentes. Registre la matriz elegida junto al resultado si otro sistema pudiera usar otra definición de YIQ. El endpoint procesa una conversión por solicitud y cuesta $0.002 mediante la API, sin red, azar, reloj, estado oculto ni formato dependiente de la configuración regional.
Qué puede hacer con ella
Decodificar datos de color NTSC históricos
Convierta muestras normalizadas de luminancia y crominancia de un conjunto YIQ educativo o de archivo en canales RGB visibles.
Verificar una implementación gráfica
Compare su matriz inversa, recorte de gama, formato hexadecimal y redondeo entero con un resultado determinista de referencia.
Examinar colores fuera de gama
Use los valores sin recortar y los indicadores por canal para entender por qué un punto YIQ válido no cabe exactamente en el cubo RGB.
Preguntas frecuentes
¿Qué intervalos de entrada se aceptan?
Y admite de 0 a 1, I de -0.5957 a 0.5957 y Q de -0.5226 a 0.5226. Los tres deben ser números JSON finitos.
¿Qué matriz inversa utiliza el convertidor?
Utiliza R = Y + 0.956I + 0.621Q, G = Y - 0.272I - 0.647Q y B = Y - 1.106I + 1.703Q.
¿Por qué una entrada YIQ válida puede sufrir recorte?
Los intervalos válidos pueden extenderse fuera del cubo RGB normalizado. Los canales brutos que quedan fuera de 0 a 1 se recortan para mostrarlos.
¿Cómo se obtienen los canales RGB de 8 bits?
Cada canal normalizado se limita entre 0 y 1, se multiplica por 255 y se redondea al entero más cercano.
¿Es reversible esta conversión?
Solo lo es si coinciden los coeficientes y el método de redondeo y ningún canal se recorta. El redondeo a enteros también elimina precisión.
¿Cuánto cuesta una solicitud de API?
Cada solicitud cuesta $0.002. La conversión procesa un elemento de color YIQ por solicitud.
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/color/yiq-rgb \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"y":0.5,"i":0.2,"q":-0.1}'const res = await fetch("https://api.kit.forhosting.com/color/yiq-rgb", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"y": 0.5,
"i": 0.2,
"q": -0.1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/yiq-rgb",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"y": 0.5,
"i": 0.2,
"q": -0.1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/yiq-rgb", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"y":0.5,"i":0.2,"q":-0.1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"y":0.5,"i":0.2,"q":-0.1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/yiq-rgb", 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
{
"y": 0.5,
"i": 0.2,
"q": -0.1
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.yiq_rgb",
"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.
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. |