Converta pixels RGB em cinza com luminância ponderada
Transforme valores de vermelho, verde e azul em um cinza fiel ao jeito como o olho percebe o brilho: vermelho puro vira 76, verde puro 150 e azul puro 29, enquanto um cinza neutro de 128 continua 128. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Converta amostras RGB de uma imagem em tons de cinza sem enviar um arquivo nem depender de um decodificador. Forneça uma matriz ordenada de pixels com canais vermelho, verde e azul e receba a mesma quantidade com os três canais definidos pelo cinza ponderado por luminância. O cálculo prioriza verde, depois vermelho e azul, representando melhor o brilho percebido do que uma média simples. Todos os canais são validados; pixels incompletos, valores não numéricos ou fora de 0 a 255 geram um erro claro.
Prepare registros RGB completos
Ele deve ser uma matriz não vazia, e cada item deve ser um objeto com os nomes canônicos r, g e b. Os canais podem ser inteiros ou fracionários, mas precisam ser finitos e estar entre 0 e 255, inclusive. O conversor exige todos os canais em cada registro.
Ela nunca presume zero, copia outro canal ou ignora um pixel, pois isso mudaria o brilho e quebraria a correspondência posicional. São aceitas até cem mil amostras. Divida imagens maiores em blocos determinísticos.
A interface trabalha com amostras decodificadas, não com bytes PNG, JPEG ou WebP.
Entenda o cálculo de luminância
Para cada amostra, o cinza é o inteiro mais próximo de 0.299 vezes vermelho mais 0.587 vezes verde mais 0.114 vezes azul. Os coeficientes somam um, mantêm pixels neutros e refletem a maior sensibilidade visual ao verde. Uma média simples pode clarear demais o azul e escurecer o verde.
Depois de um único arredondamento, o valor é gravado em r, g e b, criando um cinza RGB sem dominante. A resposta inclui a contagem e a fórmula para facilitar auditorias. A função é pura: não usa rede, aleatoriedade, relógio, modelo externo nem estado mutável.
Assim, a mesma entrada sempre produz a mesma saída. O cálculo não lineariza gama, administra perfis ICC, aplica HDR, preserva alfa ou executa pontilhamento; fluxos especializados devem cuidar dessas etapas.
Use o resultado com segurança
Leia samples como substituição posicional da matriz enviada. Como cada registro continua com três canais, consumidores RGB comuns podem recebê-lo sem formato especial. Compare count com a quantidade enviada antes de reconstruir linhas, blocos ou imagens.
Largura, altura, passo, orientação, alfa e metadados continuam sob responsabilidade de quem chama. Mantenha o alfa separado e recombine-o ao codificar. Trate erros de canal ausente, número não finito, faixa ou tamanho como problemas de dados, não como falhas para repetição automática.
Teste preto, branco, cores primárias, cinza neutro, valores fracionários e uma amostra incompleta.
Casos de uso
Montar buffers em tons de cinza
Converta amostras RGB decodificadas e recoloque-as no raster original antes da codificação.
Perguntas frequentes
Qual fórmula de cinza é usada?
Cada resultado é round(0.299 × r + 0.587 × g + 0.114 × b), depois atribuído aos três canais.
A transparência é preservada?
O alfa não faz parte do contrato. Guarde-o separadamente e recombine-o com os canais convertidos.
Por que o azul puro fica bem mais escuro que o verde puro?
Porque o olho percebe o verde como muito mais brilhante que o azul, e a fórmula dá ao verde peso 0,587 e ao azul só 0,114. O verde puro vira 150, o vermelho puro 76 e o azul puro 29.
Posso enviar um arquivo PNG ou JPEG direto?
Não. A conversão trabalha com valores de pixels já decodificados: abra o arquivo antes, envie os valores de vermelho, verde e azul e, se precisar de uma imagem, gere o arquivo depois com o resultado em cinza.
O que acontece se faltar uma das cores de um pixel?
A conversão para e indica qual pixel e qual canal estão faltando. Ela nunca supõe que o valor ausente é zero nem copia outro canal, porque isso mudaria o brilho e quebraria a ordem dos pixels.
Ferramentas relacionadas
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/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)Exemplo de requisição
{
"samples": [
{
"r": 255,
"g": 0,
"b": 0
},
{
"r": 0,
"g": 128,
"b": 255
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.grayscale_convert",
"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.
Limites
max_samples | 100000 |
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. |
Notas técnicas
Prepare registros RGB completos
Envie os pixels no campo JSON samples. Se o verde estiver ausente, por exemplo, a operação retorna invalid_input com o índice e o canal faltante.
Use o resultado com segurança
O executor do navegador usa a mesma função determinística da API. O navegador é gratuito e cada solicitação API custa US$ 0,002.
Casos de integração
Criar fixtures determinísticos
Gere resultados exatos para testes de filtros, canvas e pipelines de pixels.
Verificar pequenos lotes
Cole valores RGB representativos no navegador antes de automatizar o fluxo pela API.
Perguntas técnicas
O que ocorre se faltar um canal?
A solicitação falha com invalid_input e identifica o índice iniciado em zero e o canal r, g ou b ausente.
O endpoint aceita arquivo de imagem?
Não. Ele recebe amostras RGB já decodificadas; faça a decodificação e a codificação externamente.
Quanto custa uma solicitação API?
Uma solicitação custa US$ 0,002; você também pode executar a mesma conversão gratuitamente no navegador.