Cree un programa o función que tome el nombre del archivo como argumento o lo lea de la entrada estándar y complete la siguiente tarea:
- Leer la imagen de un archivo png (nombre dado como argumento).
- Invierta los colores en esa imagen, de modo que, por ejemplo, el verde oscuro (0, 75, 30) se convierta en (255, 180, 225) (porque 255-0 = 255, 255-75 = 180 y 255-30 = 225). No debe cambiar el valor del canal alfa.
- Imprima esa imagen en un archivo llamado
a.png
(en formato png) o muéstrela en la ventana de la GUI.
Este es el código de golf . Se aplican lagunas estándar.
code-golf
graphical-output
image-processing
Hannes Karppila
fuente
fuente
Respuestas:
ImageMagick
display -fx
, 371824bytesLa herramienta ImageMagick
display
con elfx
parámetro puede aplicar el programa anterior a un png dado como parámetro y mostrar los resultados en la pantalla.Mira mi publicación sobre meta sobre ImageMagick como lenguaje de programación. Escribí un probador principal allí como prueba de concepto.
El recuento de bytes,
display -fx code filename
es equivalente aperl -e code filename
, donde tradicionalmente contamos solocode
por longitud.fuente
Pyth,
161513 bytesSalidas a
a.png
.¡Gracias a Jakube por 2 bytes!
fuente
~
o similar)?.w-LLL255'z\a
. Pero no me preguntes cómo funciona esto o por qué lo necesitasLLL
y no algo asíLMM
.MATL , 10 bytes
Hay cinco subformatos diferentes de PNG, dependiendo de cómo se codifica el color. Ninguno de ellos parece ser más "opcional" que los demás. Elegí el más flexible
Truecolor
, en el que cada píxel puede tener un color arbitrario. El código anterior también es compatibleTruecolor with alpha
, ignorando el canal alfa.Para conocer el subformato de color de un archivo PNG: busque la secuencia de bytes
[73 72 68 82]
cerca del comienzo del archivo; y el décimo byte desde allí tendrá uno de los cinco valores en la tabla vinculada anteriormente .Como funciona el código
Muy claro:
Ejemplo
No pude resistir verme invertido, así que descargué esta imagen (que está en subformato
Truecolor with alpha
), ejecuté el código (la segunda línea es entrada del usuario)y consiguió
fuente
Java, 295
fuente
java.io.File
?import java.io.*;
, no guarda ningún byte, pero en realidad aumenta el tamaño.R, 124 bytes
Lee el nombre del archivo a través de stdin (
readline()
).Ejemplo de entrada / salida usando el primer png que encontré en esta computadora :)
fuente
CSS, 19 bytes
http://output.jsbin.com/suqayudoyu
fuente
Tcl, 176 bytes
Carga el PNG a través del
photo
tipo de imagen, obtiene los datos de la imagen, convierte cada fila y color restando de #FFFFFF, luego vuelve a escribir el archivo en el disco (como "a.png").Para obtener mejores resultados, use PNG TrueColor, ya que Tk intentará usar la misma resolución de color que los datos de la imagen de origen.
Para ver la imagen sin problemas de muestreo, agregue
hasta el final. (Obviamente, esto es más largo que la opción de guardar el disco).
fuente
foreach
porlmap
Mathematica, 140 bytes
fuente
Import[#]
aImport@#
, y lo mismo paraColorCombine[Most@#]
.ColorNegate@*Import
sería una respuesta completa?cmd + IrfanView, 19 caracteres
Solo la alternativa cara de la respuesta de Sparr .
fuente
Julia,
9479 bytesEste es un programa completo que toma un nombre de archivo como argumento de línea de comando y sobrescribe el archivo dado con la imagen invertida. Se requiere que el
FileIO
yImage
el paquete se instalará. Sin embargo, este último no necesita ser importado.Llame al programa desde la línea de comando como
julia filename.jl /path/to/image.png
.Sin golf:
Ejemplo:
fuente
Python + PIL, 85 bytes
Esto define una función anónima que toma un nombre de archivo como una cadena y guarda la imagen resultante en
a.png
.Prueba de funcionamiento:
fuente
from PIL import Image as I
seguido de reemplazoImage
en la función conI
import Image
funcionará, reduciendo una carga completa de bytesfrom PIL.Image import*
eval
función se ejecuta contra todas las "bandas", incluida la alfa. Esto es lo que obtengo al invertir el logotipo de Firefox - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 bytes (o + 72 =247234)Mi primera presentación en este sitio.
Probablemente podría reducir algunos bytes. Necesita
stb_*
implementación para estar en una biblioteca separada o al comienzo de este archivo con:No lo incluí en el recuento porque es esencialmente parte de la biblioteca (especialmente si se compila por separado). Sin embargo, +72 bytes para agregar eso si es necesario.
Actualización 1:
Se dio cuenta de que solo una función (a diferencia de un programa completo) es aceptable, eliminando 15 bytes. La edad aplicación (que es todo un programa), como referencia:
fuente
Java,
300298 bytesfuente
MATLAB / Octave, 31 bytes
Código:
Ejemplo:
Explicación:
Lea la imagen,
x
desde un archivo de gráficos, complemente la imagen y luego visualice la imagen.fuente
x
está predefinido, lo que no está permitido. Puede convertirlo en una función lambda para +4 bytes con@(x)
.FFmpeg, 10 bytes
Editar: siguiendo el ejemplo de la respuesta de @ Sparr
(lo anterior cuando se pasa a ffplay junto con el nombre de la imagen, mostrará la imagen negada)
Lo anterior se guarda como un archivo por lotes.
fuente
Raqueta 282 bytes
Forma más legible:
Uso:
fuente
Golang, 311 bytes
sin golf
fuente
Python 2 + OpenCV , 55 bytes
La biblioteca OpenCV usa matrices NumPy para leer, procesar y escribir imágenes. A continuación se muestra un ejemplo de este script que invierte una imagen encontrada en mozilla.org .
Todos los canales, incluido el canal alfa, se invertirán. Esto es problemático para las imágenes que tienen transparencia. Pero como señaló @Mego, el soporte para el canal alfa es opcional.
A continuación se muestra una versión comentada de 82 bytes cuya propiedad maneja el canal alfa.
Como se muestra a continuación, esto maneja correctamente la inversión del logotipo de Firefox mientras conserva el fondo transparente.
fuente