Esse desafio é mudar gradualmente os tons de uma imagem para criar imagens bonitas como esta:
( original )
Desafio
Escreva um programa ou função que inclua dois números inteiros não negativos e uma imagem em qualquer formato de arquivo de imagem comum de sua escolha (você pode seguir um caminho para a imagem ou para os dados brutos da imagem).
Vamos chamar o primeiro número inteiro de ciclos e o segundo número inteiro de deslocamento .
Também definiremos a etapa de ponto flutuante como ciclos de 360 vezes divididos pela área da imagem ou step = 360 * cycles / (image width * image height)
.
Para cada pixel P na imagem, movendo uma linha de cada vez, da esquerda para a direita, de cima para baixo (ou seja, na ordem de leitura, se os pixels forem letras), faça o seguinte:
Aumente a tonalidade de P em graus de deslocamento (retornando de 360 para 0, se necessário).
Em seguida, aumentar compensado por etapa .
Salve, exiba ou imprima a imagem resultante em qualquer formato de arquivo de imagem comum.
Este procedimento aumenta incrementalmente a tonalidade de todos os pixels da imagem, fazendo ciclos em loop completo ao redor do arco-íris de tonalidades , começando inicialmente por compensar a tonalidade por offset .
Quando os ciclos são 1 e o deslocamento é 0, como na imagem da Noite estrelada acima, as linhas superior e inferior dos pixels praticamente não têm mudança de tonalidade, mas há um ciclo de cores completo.
Detalhes
Os ciclos podem ser qualquer número inteiro não negativo, mas você pode assumir que o deslocamento é de 0 a 359, inclusive.
Quando o ciclo é 0, todos os pixels da imagem terão sua tonalidade alterada exatamente como o deslocamento, pois a etapa também deve ser 0. (Nesse caso, se o deslocamento for 0, a imagem não será alterada.)
Você pode assumir que ciclos e deslocamento são inseridos como flutuadores, se desejado (por exemplo, em
1.0
vez de1
). (Percebo que eles não precisam ser números inteiros, apenas simplifica o desafio.)"Matiz" refere-se à versão do espaço de cores RGB, comum nos modelos de cores HSL / HSV .
Exemplos
Original:
Ciclos = 1, deslocamento = 0:
Ciclos = 1, deslocamento = 180:
Original:
Ciclos = 2, deslocamento = 60:
Original:
(Obrigado ArtOfCode .)
Ciclos = 1, deslocamento = 120:
Original:
(Obrigado, maçaneta da porta .)
Ciclos = 1, deslocamento = 0:
Ciclos = 4, deslocamento = 0:
Ciclos = 200, deslocamento = 0:
Ciclos = 30000, deslocamento = 0:
(Essas imagens podem não ser perfeitas em pixels devido à compressão do imgur.)
Pontuação
O código mais curto em bytes vence. O desempatador é a resposta votada mais alta.
As respostas que postarem suas próprias imagens de teste interessantes receberão mais pontos de brownie de mim.
fonte
Respostas:
Pyth, 86 bytes, programa completo
Pyth não possui conversões de espaço de cores integradas - este é o negócio real.
Recebe a entrada no seguinte formato no stdin:
A imagem de saída é gravada em
o.png
.Isso funciona girando o cubo de cores em torno de sua diagonal e fixando quaisquer valores fora do intervalo.
Se
a
é o ângulo a ser girado er, g, b
a cor de entrada, calculamos a nova corr', g', b'
por:fonte
Python, 379 bytes
Isso leva um caminho para a
.jpg
como entrada. Não vai funcionar com png, embora você pode mudarr,g,b=i.split();
parar,g,b=i.split()[:3];
carregar uma imagem png.Aqui estão algumas imagens:
Original:
Deslocamento: 0, Ciclos: 4
Original:
Deslocamento 0, 1 ciclo:
Original:
Deslocamento 0, 2,5 ciclos:
fonte
Java (programa completo),
491488 bytes (Obrigado @Geobits)Ungolfed
Explicação
Uso: Bem direto. Compile com
java -c Q.java
. Corra comjava Q <cycles> <offset> <imagepath>
. Substituirá a imagem existente, portanto, tenha cuidado.Eu ia fazer uma solução apenas de método no começo, mas não sabia muito bem como lidar com as importações, então imaginei que iria usar java completo , provavelmente isso não vai ganhar de qualquer maneira: ^)
Resultados:
Image 1: 1 cycle, 0 offset
Image 1: 1 cycle, 180 offset
Image 2: 2 cycles, 60 offset
Image 3: 1 cycle, 120 offset
Image 4: 1 cycle, 0 offset
Image 4: 4 cycles, 0 offset
Image 4: 200 cycles, 0 offset
Bonus: The Starry Night, 1 cycle, 0 offset
fonte
java.io.File
vez dejava.io.*
?import
**static
**, não apenasimport
?ImageIO::read
eImageIO::write
sem precisarImageIO.
acrescentar: Isso adiciona 9 bytes (static .*
), mas salva 16 (ImageIO.
duas vezes).