Este desafío se trata de cambiar gradualmente los tonos en una imagen para hacer imágenes bonitas como esta:
( original )
Reto
Escriba un programa o función que tome dos enteros no negativos y una imagen en cualquier formato de archivo de imagen común que elija (puede tomar un camino hacia la imagen o los datos de la imagen sin procesar).
Llamaremos al primer entero los ciclos y al segundo entero el desplazamiento .
También definiremos el paso de coma flotante como ciclos de 360 veces divididos por el área de la imagen, o step = 360 * cycles / (image width * image height)
.
Para cada píxel P en la imagen, moviendo una fila a la vez, de izquierda a derecha, de arriba a abajo (es decir, en orden de lectura si los píxeles fueran letras), haga lo siguiente:
Aumente el tono de P en grados de desplazamiento (girando de 360 a 0 si es necesario).
Luego aumente la compensación por pasos .
Guarde, muestre o imprima la imagen resultante en cualquier formato de archivo de imagen común.
Este procedimiento aumenta gradualmente el tono de todos los píxeles en la imagen, haciendo ciclos de bucles completos alrededor del arco iris de tono , comenzando por compensar inicialmente el tono por desplazamiento .
Cuando los ciclos son 1 y el desplazamiento es 0, como en la imagen Starry Night anterior, las filas de píxeles superior e inferior prácticamente no tienen cambio de tono, pero en el medio hay un ciclo de color completo.
Detalles
Los ciclos pueden ser cualquier número entero no negativo, pero puede suponer que el desplazamiento es de 0 a 359 inclusive.
Cuando los ciclos son 0, cada píxel de la imagen tendrá su tonalidad desplazada exactamente por desplazamiento, ya que el paso también debe ser 0. (En este caso, si el desplazamiento es 0, la imagen no cambia en absoluto).
Si lo desea, puede suponer que los ciclos y el desplazamiento se introducen como flotantes (es decir, en
1.0
lugar de1
). (Me doy cuenta de que no necesitan ser enteros en absoluto, solo hace que el desafío sea más simple)."Tono" se refiere a la versión de espacio de color RGB, común en los modelos de color HSL / HSV .
Ejemplos
Original:
Ciclos = 1, desplazamiento = 0:
Ciclos = 1, desplazamiento = 180:
Original:
Ciclos = 2, desplazamiento = 60:
Original:
(Gracias ArtOfCode .)
Ciclos = 1, desplazamiento = 120:
Original:
(Gracias pomo de la puerta )
Ciclos = 1, desplazamiento = 0:
Ciclos = 4, desplazamiento = 0:
Ciclos = 200, desplazamiento = 0:
Ciclos = 30000, desplazamiento = 0:
(Estas imágenes pueden no ser perfectas en píxeles debido a que imgur las comprime).
Tanteo
El código más corto en bytes gana. Tiebreaker es la respuesta más votada.
Las respuestas que publiquen sus propias imágenes de prueba de aspecto genial obtendrán más puntos brownie de mí.
fuente
Respuestas:
Pyth, 86 bytes, programa completo
Pyth no tiene conversiones de espacio de color incorporadas: este es el verdadero negocio.
Toma entrada en el siguiente formato en stdin:
La imagen de salida se escribe en
o.png
.Esto funciona girando el cubo de color alrededor de su diagonal y luego sujetando cualquier valor fuera del rango.
Si
a
es el ángulo para rotar yr, g, b
es el color de entrada, calculamos el nuevo colorr', g', b'
por:fuente
Python, 379 bytes
Esto toma un camino hacia a
.jpg
como entrada. No funcionará con png, aunque puede cambiarr,g,b=i.split();
ar,g,b=i.split()[:3];
para cargar una imagen png.Aquí hay algunas imágenes:
Original:
Offset: 0, Ciclos: 4
Original:
Offset 0, 1 ciclo:
Original:
Offset 0, 2.5 ciclos:
fuente
Java (programa completo),
491488 bytes (Gracias @Geobits)Sin golf
Explicación
Uso: bastante sencillo. Compilar con
java -c Q.java
. Corre conjava Q <cycles> <offset> <imagepath>
. Anulará la imagen existente, así que tenga cuidado.Al principio iba a hacer una solución de método único, pero no sabía cómo manejar las importaciones de esos, así que pensé que iría a Java completo , de todos modos esto probablemente no va a ganar: ^)
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
fuente
java.io.File
lugar dejava.io.*
?import
**static
**, no soloimport
?ImageIO::read
yImageIO::write
sin tener que anteponerImageIO.
: Esto agrega 9 bytes (static .*
) pero ahorra 16 (ImageIO.
dos veces).