Entrada
El nombre de un archivo en el formato de gráficos de trama que elija. El formato elegido debe admitir al menos 8 bits por canal y 3 canales.
Salida
Un archivo en el mismo formato, con las mismas dimensiones y píxeles que el primero, pero cuyos píxeles se agrupan en orden descendente de la cantidad de veces que ocurren, ordenados de izquierda a derecha, de arriba a abajo.
- Si ciertos colores de píxeles aparecen la misma cantidad de veces, su orden no se especifica.
- No debe sobrescribir el archivo de entrada (use un nombre de archivo diferente para la salida).
- Se permiten todas y cada una de las bibliotecas de procesamiento de imágenes de terceros.
Ejemplo
Dará una salida similar a:
Especialmente en las partes inferiores de la imagen puede haber alguna variación, debido a la ruptura de lazos entre colores de igual frecuencia.
File
objeto de tipo complejo ...? Eso marcaría una gran diferencia en algunos idiomas.Respuestas:
J,
9481 bytesUna función que toma el nombre de un archivo PNG (sin canal de transparencia) y escribe el resultado en el nombre de archivo de entrada precedido por "o".
Método
fuente
x
.y
. (Si se define una función con dos argumentos los que se accede porx
yy
y no se puede definir funciones con más argumentos.)Mathematica,
125123 bytesEsto define una función sin nombre que toma el nombre del archivo en cualquier formato de imagen común y escribe el resultado en un archivo con el mismo nombre pero antepuesto
a
. El resultado se ve un poco diferente de los OP, ya que MathematicaSortBy
rompe los lazos por orden de clasificación predeterminado, por lo que los bits inferiores donde se producen muchas ataduras se ven un poco más limpios:La implementación en sí es realmente sencilla:
ImageData
para obtener una cuadrícula de valores de color.Join
para aplanar la matriz.Tally
para contar la ocurrencia de cada color.SortBy[...,-Last@#&]
ordenar por frecuencias de mayor a menor.ConstantArray
yJoin
para ampliar los recuentos de nuevo.ArrayReshape
para recuperar la forma de la imagen original (obtenida conDimensions
).Image
para volver a convertir los datos en un objeto de imagen.Para su información, se usan 22 bytes en el archivo de E / S. Una versión equivalente que toma y devuelve un objeto de imagen viene en 103 bytes:
fuente
Python2 / PIL,
244226225223222202186182170159Registro de cambios
Mostrar fragmento de código
Versión más corta de stokastic , 123
Bueno, al menos intentemos, aunque ya esté vencido.
Es extremadamente lento, Panda procesó durante varios minutos en mi computadora portátil.
Guarda con un nombre de archivo con el nombre de archivo original repetido dos veces.
fuente
i=open(raw_input());d=list(i.getdata());i.putdata(sorted(d,key=lambda D:d.count(D)));i.save('o.png')
, aunque es muy lento para imágenes grandes (llamadas list.count en cada píxel).o.png
Python, 1197 bytes
El
png
módulo que usé .fuente
C # 413
Programa completo Pase el nombre del archivo en la línea de comando, la salida se guarda en el mismo formato que el archivo "o".
No usar algunas características interesantes de linq, como SelectMany y Enumerable.Range, ya que el programa sería más limpio pero más largo.
Formateo legible por cortesía de VS2010
fuente
{
caracteres}
caracteresPython 2: 191 bytes
Aquí está mi intento. Pensé que podría ahorrar algo de espacio usando
Counter
, pero no terminó tan pequeño como la respuesta de Pietu1998.Salida de Panda
fuente