Reto:
Tome la entrada de dos imágenes en blanco y negro (monocromo) y xor cada píxel del primero, con cada píxel del segundo, agréguelos a una nueva imagen y envíe la nueva imagen.
Algunas aclaraciones:
El tamaño de las imágenes no importa. El formato de extensión / imagen no importa. Puede hacer que ingrese cualquier extensión y produzca cualquier extensión, siempre que la extensión se use para almacenar imágenes digitales. También puede usar gráficos para dibujar la salida en, por ejemplo, un cuadro de imagen si lo desea. De lo contrario, guarde la salida como un archivo. La entrada se puede tomar como una ruta a la imagen o url.
Sin embargo, una cosa que no puede hacer son las matrices de E / S, por ejemplo. de trillizos (R, G, B).
NO manipule alfa . No debe ser xored, debe ser 255 (valor máximo) por cada píxel.
¿Qué quieres decir con xo cada píxel?
No tiene que hacerlo de esta manera, pero una forma de xor dos píxeles es tomar sus valores RGB y xor R1 con R2, G1 con G2, B1 con B2 y tomar el resultado, que es su nuevo color
Como solo tenemos dos colores, obviamente cuando los colores son iguales, el resultado sería (0,0,0) y cuando son diferentes (el blanco es 255,255,255 y el negro es 0,0,0) en este caso, el resultado sería ser 255,255,255.
Por lo tanto, cuando dos píxeles son diferentes, el resultado es un píxel blanco, de lo contrario, un píxel negro
Ejemplo de E / S:
Entrada 1: Entrada 2:
Salida:
Este es el código de golf, por lo que gana el código más corto.
fuente
Respuestas:
El lenguaje de expresión Fx (ImageMagick),
84 bytesEDICIONES
u!=v
-4 bytesComo "Fx Expression Language" aparentemente se está completando, volví a perfilar mi respuesta (fue Unix Shell + Image Magick).
Golfed
Fx no admite XOR a nivel de bit ni NOT a nivel de bit , así que lo he usado en su
!=
lugar (que funciona bien para las imágenes BW puras).La entrada y la salida son implícitas (controladas por el intérprete).
Uso
La utilidad de conversión ImageMagick , sirve como el intérprete de "Lenguaje de expresión Fx", cuando se invoca con
-fx
, como se ilustra a continuación:Los argumentos son:
Salida de muestra
fuente
Mathematica,
373415 bytes¡Gracias a Ian Miller por reducir el número de bytes a más de la mitad!
Al final, siempre hay un incorporado. Esta función toma dos imágenes como entrada y emite una imagen; hace algo más complicado para las imágenes en color, pero para blanco y negro es exactamente XOR.
Envíos anteriores:
¡Gracias a JungHwan Min por guardar 3 bytes!
Función sin nombre que toma un par ordenado de imágenes (de dimensiones compatibles) como entrada y devuelve una imagen mostrada.
ImageData
obtiene solo los datos de píxeles sin todos los contenedores / metadatos; desafortunadamente, devuelve números reales, por lo queChop
es necesario para ayudar a tratarlos como enteros.BitXor
hace exactamente lo que dice en la lata (y los hilos sobre listas anidadas), yImage
convierte el RGB resultante en una imagen.Envío original, que tomó un par ordenado de URL o nombres de archivo como entrada:
fuente
ImageDifference[#,#2]&
Java,
336335328 bytesSin golf:
fuente
String[] y
. Sólo un pequeño golfito.public
depublic class M
para salvar a 7 bytes.png
no debería ser necesariaPython,
646057 bytesSoy nuevo en el golf, ¡así que ten piedad!
¡Gracias a @Blender y @FlipTack por salvarme 7 bytes!
fuente
from cv2 import*
debería eliminar 4 caracteres.d=
:), hacerr=imread
y luego usarr
dos veces podría ser más cortoOctava,
433834 bytesGracias a flawr me ahorró 5 bytes.
Gracias a Luis Mendo me ahorró 4 bytes sugeridos para usar en
a~=b
lugar dexor(a,b)
.Una función que toma como nombre de archivo de entrada las dos imágenes de entrada
a,b
y muestra el resultado.Respuesta anterior que escribe en un archivo:
Una función que toma como nombre de archivo de entrada las dos imágenes de entrada
a,b
y el nombre de archivo de la imagen de salidac
.Uso:
El resultado se guarda en
out.png
fuente
imshow()
lugar deimwrite()
?imread(a)~=imread(b)
(o+(imread(a)~=imread(b))
si la entrada lógica no está permitida porimshow
) en lugar dexor(...)
?JavaScript (ES6),
333320308299297 bytes-
1220 bytes guardados por Ismael Miguel- 2 bytes guardados por el usuario2428118
Espera imágenes ya cargadas, toma el tamaño de la primera entrada como tamaño de salida y devuelve un elemento de lienzo.
Sin golf
Ps: primera vez en code-golf, por lo que probablemente se pueda jugar más y mi cuenta podría ser errónea.
PP: el contexto 2D de lienzo tiene un
xor
[modo de composición ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation ), pero funciona en valores alfa ...Se podría jugar aún más (251 bytes) con un tamaño fijo de 300 * 150 px (todo lo que queda es negro) como en la respuesta de Procesamiento
Mostrar fragmento de código
fuente
c
conc=i=>{with(document.createElement('canvas')){width=i.width,height=i.height;return getContext`2d`}}
y ahorre 16 bytes.xor
un rectángulo negro sobrexor
las dos imágenes para volver a 255 alfa?with
pero parece bastante bueno para jugar al golf ;-) Además, olvidé que la plantilla literal guarda 2 bytes ...(i,j)=>{c=i=>{with(document.createElement(C='canvas')){width=i.width,height=i.height;return getContext`2d`}},g=i=>{x=c(i);x.drawImage(i,0,0);return x.getImageData(0,0,i.width,i.height)},a=g(i),b=g(j).data,d=a.data,r=c(i);d.forEach((e,i)=>{d[i]=i%4>2?255:e^b[i]});r.putImageData(a,0,0);return r[C]}
Procesamiento,
124118117 bytesUso:
Sin golf
fuente
MATL , 10 bytes
Explicación
Esta es básicamente la misma respuesta, como la solución Octave existente : toma los nombres de archivo o URL de ambas imágenes como entradas y muestra el resultado en la pantalla.
Uso
fuente
Perl, 260 bytes
251 bytes de código + 9 bytes para
-MImager
.No estoy seguro de que Perl sea el mejor lenguaje para este desafío, pero quería saber cuál fue la imagen del comentario de @ orlp. Y me hace usar un poco de esos módulos gráficos, eso es algo bueno. ¡Y disfruté codificándolo!
Una versión más legible:
Tendrá que instalar Imager si quiere probarlo, pero es bastante simple: simplemente ejecute
(echo y;echo) | perl -MCPAN -e 'install Imager'
en su terminal.fuente
LÖVE2D , 199 bytes
Bastante simple, toma dos archivos de imagen en la línea de comando, emite un archivo llamado "Z" en el directorio Love. ¡También funciona para imágenes a todo color!
fuente
J, 54 bytes
Toma dos argumentos donde cada uno es el camino a una imagen de entrada en
bmp
formato. Cada imagen se lee como una matriz de enteros RGB de 24 bits y se analiza en un triplete de valores RGB de 8 bits, se toma el signo de cada uno y las dos matrices se unen en XOR. El resultado luego se escala en 255, se convierte de nuevo desde un triplete de números base 256 en un número entero y se escribe en unbmp
archivo de salida llamadoo
.fuente
C, 189 bytes
Opera en imágenes PBM. Llame
f(a, b, out)
con los nombres de ambos archivos de entrada y el archivo de salida.Suposiciones
Ambos encabezados de imagen de entrada son idénticos (espacios en blanco incluidos) y tienen menos de
9 * sizeof(int)
caracteres.Estamos en un buen sistema operativo que descarga y cierra los archivos filtrados.
EOF == -1
Ungolfed y explicó: (se omiten las barras invertidas)
C (flexión de especificaciones), 149 bytes
Todavía usa archivos PBM, pero ahora:
La imagen tiene que tener un píxel de alto y 8 píxeles de ancho o menos, porque PBM incluye 8 píxeles en un byte.
El encabezado debe ser de 7 bytes (por ejemplo,
P4 8 1
con un espacio final).Ambos archivos se buscan hacia adelante mientras se llenan
t
con su encabezado, luego los últimos bytes se leen, graban y vuelven a escribir. Aprovechafread
yfwrite
tiene listas de parámetros similares para factorizar las tres operaciones en el encabezado detrás de la misma macro.fuente
R, 45 bytes
a
yb
representan los nombres de archivo de los dos archivos de imagen.Ejemplo:
Salida:
fuente
Procesamiento, 82 bytes
Abusa de las amplias funciones de dibujo de Processing para evitar hacer XORing. Combina las dos imágenes con el
DIFFERENCE
modo y las dibuja en la pantalla.Uso
Sin golf
fuente
32
lugar deDIFFERENCE
. Este sería un buen consejo para jugar al golf: codegolf.stackexchange.com/questions/26809/… :)C #, 233 bytes
Gracias a Unknown6656 por el consejo de que los argumentos de la línea de comandos no son necesarios. El programa ahora lee de los archivos "a" y "b" y escribe en el archivo "c" en el mismo formato que "a". Apagado por un error solucionado también.
Establece cada píxel en negro si el color es el mismo, de lo contrario blanco.
Para guardar bytes, captura excepciones fuera de límites, en lugar de verificar las propiedades Ancho y Altura de los mapas de bits. Cada vez que x sale de los límites, se restablece a 0 ey se incrementa. Cuando y sale de los límites, x es 0 y el bucle se rompe para guardar la imagen y salir.
Ejemplo compilar usando csc y ejecutar usando mono:
fuente
(string[] v)
dentro de la declaración principal, ya que C # no lo necesita explícitamente para ejecutar una aplicaciónClojure, 300 bytes
Estafa flagrante de la respuesta de Java . No sabía cómo hacer el desafío, pero tenía curiosidad por saber qué tan bien se tradujo la solución Java en Clojure. Fue bastante sencillo. El código no protegido es realmente bonito.
Este fue el primer desafío de código de golf que hice que incluyó importaciones. Probablemente haya una forma de optimizarlos para guardar algunos bytes.
Sin golf:
fuente
PHP
246243 bytesProbablemente pueda jugar más golf.
Ejecútelo desde la línea de comando así:
fuente
$i=imagecreatefrompng;$a=$i($argv[1])
es un byte más largo que$a=($i=imagecreatefrompng)($argv[1])
. Y podría probar imágenes de paleta con una paleta de dos colores.($f=func)(params)
requiere PHP 7.for(;$k<$w*$h;)
confor(;$y<$h;$y+=1/$w)
,$x=$k%$w, $y=$k++/$w
con$x, $y
y el último$x
con$x++
. (suponiendo que no haya errores de redondeo para cualquier tamaño de imagen razonable)Node.js,
156135 bytesLos archivos de imagen de entrada y salida deben estar en formato PBM (P1), donde está la primera línea
P1 [width] [height]
, y la segunda línea son los valores ascii b / w sin espacios.Aquí están las imágenes de entrada seguidas de la salida xor (32x32 píxeles):
fuente