É inverno e chegou a época do ano para começar a esfriar (e para estranhos lenços de cabeça coloridos começarem a aparecer ... em breve). Vamos escrever um código para criar imagens de avatar e outras imagens congeladas, para se adequar ao tema!
Entrada
A entrada para os envios para esse desafio deve ser uma imagem (a imagem a congelar) e um número (o limite, que será explicado mais adiante).
Você pode inserir a imagem da maneira que o seu idioma suportar (um caminho de arquivo ou URL como argumento, retirá-la da área de transferência, arrastar e soltar uma imagem etc.) e em qualquer formato listado aqui que expresse cores em RGB (você pode suportar / exigir RGBA, se desejar, mas isso não é um requisito).
Você também pode inserir o número da maneira que desejar (argumento de linha de comando, STDIN, caixa de diálogo de entrada etc.), com a exceção de codificá-lo em seu programa (por exemplo n=10
). Se você usar um caminho / URL de arquivo para a imagem, ela deverá ser inserida dessa maneira também.
Saída
O programa deve processar a imagem de acordo com a descrição abaixo e enviá-la da maneira que desejar (para um arquivo, mostrando-o na tela, colocando-o na área de transferência, etc.).
Descrição
As submissões devem processar a imagem com as três etapas a seguir. n
refere-se ao número que seu programa recebeu como entrada junto com a imagem.
Aplique um desfoque de raio
n
à imagem de entrada, substituindo os valores de R, G e B de cada pixel pelos valores médios de R, G e B de todos os pixels a uma distância den
pixels de Manhattan , ignorando todas as coordenadas fora dos limites. (Ou seja, todos os pixels em que a soma da diferença em X e a diferença em Y é menor ou igual an
.)(nota: usei um desfoque gaussiano para as imagens acima porque havia uma função interna conveniente para ela, para que suas imagens pudessem parecer um pouco diferentes.)
Defina cada pixel como um pixel aleatório a uma distância de
n/2
pixels ("distância" é definida da mesma maneira que na etapa anterior).Isso deve ser feito percorrendo a imagem e definindo cada pixel para um pixel aleatório nesse intervalo, para que alguns pixels desapareçam completamente e outros possam ser duplicados.
Todas as alterações devem ser aplicadas ao mesmo tempo. Em outras palavras, use os valores antigos dos pixels (após a etapa 1, mas antes desta etapa), não os novos valores após defini-los para um pixel aleatório.
Multiplique o valor RGB "azul" de cada pixel por 1,5, limitando-o a 255 (ou qualquer que seja o valor máximo para uma faixa de pixels) e arredondando para baixo.
Regras
Você pode usar bibliotecas de imagens / funções relacionadas ao processamento de imagens incorporadas ao seu idioma; no entanto, você não pode usar nenhuma função que execute uma das três principais tarefas mencionadas na descrição. Por exemplo, você não pode usar uma
blur
função, mas umagetPixel
função está correta.Isso é código-golfe , então o código mais curto em bytes vence!
dx <= n && dy <= n
é uma representação precisa da distância de Manhattan, não é?