Conversor de XYZ para xyY
O conversor de XYZ para xyY transforma três valores tristímulos CIE em duas coordenadas de cromaticidade e um valor separado de luminância.
Executar grátis
Assim, você pode comparar a cor independentemente do brilho e preservar o componente Y original em trabalhos sensíveis à luminância. Informe X, Y e Z não negativos em uma escala consistente; o conversor valida os dados, rejeita a cromaticidade indefinida do preto e retorna números estáveis pelas equações de normalização CIE padrão.
Entenda o que muda entre XYZ e xyY
O CIE XYZ representa um estímulo por três valores tristímulos, mas reúne a magnitude desses valores e suas proporções. A representação xyY separa essas ideias. Suas coordenadas x e y minúsculas descrevem a cromaticidade, isto é, de forma geral, a cor sem a intensidade total. O Y maiúsculo mantém o componente tristímulo original ligado à luminância. Essa separação ajuda quando você precisa posicionar cores em um diagrama de cromaticidade CIE 1931, comparar medições com níveis diferentes de brilho ou armazenar a luminância ao lado de um par compacto de coordenadas. A conversão não aplica adaptação de ponto branco, curva gama, matriz RGB nem correção perceptual; ela apenas normaliza os valores XYZ fornecidos. Portanto, observador, iluminante, condições de medição e escala XYZ continuam sendo definidos pelo fluxo colorimétrico externo. Converter para xyY duas trincas obtidas sob referências distintas não torna essas condições equivalentes. Use valores do mesmo contexto colorimétrico pretendido e interprete as coordenadas retornadas dentro desse contexto.
Como o cálculo determinístico funciona
Primeiro, o conversor verifica se X, Y e Z são números finitos e não negativos. Em seguida, calcula a soma X + Y + Z. O x minúsculo corresponde a X dividido por essa soma, e o y minúsculo corresponde a Y dividido pelo mesmo denominador. O Y maiúsculo do resultado é copiado da entrada sem normalização, preservando a grandeza relacionada à luminância e sua escala original. Como as duas coordenadas usam um denominador comum, x e y não dependem da escala: multiplicar todas as entradas XYZ pelo mesmo fator positivo mantém x e y e multiplica Y por esse fator. Os resultados são arredondados com precisão significativa estável, garantindo valores JSON consistentes em execuções repetidas. O cálculo não usa rede, aleatoriedade, relógio, tabela de consulta nem perfil de cor do ambiente. A trinca X = 0, Y = 0, Z = 0 é rejeitada porque o denominador é zero e um estímulo totalmente escuro não possui cromaticidade definida. Somas que excedam o intervalo numérico finito também são recusadas.
Prepare os dados e interprete a saída com segurança
Use uma única escala consistente nas três entradas. XYZ costuma ser expresso com um branco de referência próximo de Y = 100, mas valores normalizados próximos de Y = 1 também são válidos; este conversor não pressupõe nenhuma dessas convenções. O Y maiúsculo retornado permanece na escala informada por você. As coordenadas x e y minúsculas são razões e, por isso, não têm unidade. Com entradas XYZ válidas e não negativas, cada coordenada fica entre zero e um, e x + y não ultrapassa um; a terceira coordenada implícita é z = 1 - x - y, caso uma etapa posterior precise dela. Não confunda y com Y: y é uma coordenada normalizada de cromaticidade, enquanto Y é o valor tristímulo original relacionado à luminância. Lembre-se também de que xyY não é perceptualmente uniforme; distâncias geométricas iguais em um diagrama xy não representam necessariamente diferenças visuais iguais. Use a conversão em intercâmbio padronizado, gráficos, instrumentação ou cálculos intermediários. Para medir diferenças perceptuais, avance para um espaço apropriado, como CIELAB, depois de aplicar as regras necessárias de branco de referência e adaptação.
Casos de uso
Plotar uma cor medida
Converta a saída XYZ de um espectrofotômetro em coordenadas x e y para um diagrama CIE 1931, preservando a luminância.
Comparar cromaticidade em vários brilhos
Normalize medições XYZ escaladas proporcionalmente para comparar suas coordenadas de cromaticidade separadamente de Y.
Preparar dados colorimétricos
Transforme registros XYZ na representação xyY esperada por sistemas de iluminação, telas, imagem ou calibração.
Perguntas frequentes
Quanto custa a conversão?
O preço da API é US$ 0,002 por solicitação. A versão executada no navegador é gratuita.
Qual escala XYZ devo usar?
Qualquer escala consistente é válida. Use a mesma para X, Y e Z; o Y maiúsculo da saída preserva essa escala.
Por que uma entrada XYZ totalmente nula é rejeitada?
As fórmulas dividem por X + Y + Z. Em um estímulo totalmente nulo, essa soma é zero e a cromaticidade não é definida matematicamente.
Este conversor realiza adaptação cromática?
Não. Ele apenas normaliza XYZ em coordenadas xy e preserva Y; não altera pontos brancos nem condições do observador.
Por que y minúsculo e Y maiúsculo são diferentes?
O y minúsculo é uma razão de cromaticidade sem unidade. O Y maiúsculo é o componente XYZ original relacionado à luminância.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/color/xyz-xyy \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x_value":41.24,"y_value":21.26,"z_value":1.93}'const res = await fetch("https://api.kit.forhosting.com/color/xyz-xyy", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x_value": 41.24,
"y_value": 21.26,
"z_value": 1.93
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/xyz-xyy",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x_value": 41.24,
"y_value": 21.26,
"z_value": 1.93
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/xyz-xyy", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x_value":41.24,"y_value":21.26,"z_value":1.93}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x_value":41.24,"y_value":21.26,"z_value":1.93}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/xyz-xyy", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"x_value": 41.24,
"y_value": 21.26,
"z_value": 1.93
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.xyz_xyy",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |