Comprimir imágenes (idénticas) en tablas de datos de JMPJMP tiene la capacidad de almacenar imágenes en una columna de datos.
Incluso almacenar la misma imagen 1000 veces es súper rápido, y no supone ningún problema para la memoria del PC.
Pero guardar el archivo en el disco duro lleva tiempo, ¡y mucho espacio!
Activar la compresión GZ no ayuda:

Pruébalo: ¿por qué no funciona la compresión GZ?
dt = new table("test", add rows(1000),Compress File When Saved( 1 ), new column ("img", Expression));
myIMg= New Image(open("https://apod.nasa.gov/apod/image/2603/NGC1300-LRGB_1024.jpg"));
:img[1] = myImg;
// add the image to row 1
dt << save("$temp\test1.jmp");
wait(0);
Show(File Size( "$temp\test1.jmp" ));
// add the image to every row
for each row(
:img=myImg
);
wait(0);
lastImg= new image(:img[1000]);
last image << scale(0.2);
ex = New Window( "Modal Dialog example",
Modal,
V List Box(
Text Box( "Wow, very fast! this is the image in row 1000:" ),
Picture Box (last image),
Text Box( "do you have enough time/space to save the data table?" ),
H list Box (Button Box ("OK",bb<< close window()),bb = Button Box("cancel", bb<< close window();stop();)),
)
);
dt << save("$temp\test2.jmp");
wait(0);
Show(File Size( "$temp\test2.jmp" ));
Automatización y secuencias de comandosOrganización del contenidoRe: Comprimir imágenes (idénticas) en tablas de datos de JMP¿Por qué JMP es tan rápido antes de que se guarden los archivos?
Para el usuario parece que en cada fila se guarda una imagen:

Pero JMP solo almacena una referencia a la imagen original. Al cambiar el tamaño se revela el enlace:
names default to here(1);
dt = new table("test", add rows(10),Compress File When Saved( 1 ), new column ("img", Expression));
myIMg= New Image(open("https://apod.nasa.gov/apod/image/2603/NGC1300-LRGB_1024.jpg"));
:img[1] = myImg;
// add the image to every row - as a "reference"
for each row(
:img=myImg
);
wait(0);
// add the image to row 4 - as a new image
:img[4] = new image(myImg);
// change on e of the images
image2 = :img[2];
image2 << scale(0.5);
// ... changes all the images - because all of them are links to the same image
Show(image2 << get size);
Show(myImg << get size);
Show(:img[3] << get size);
// all of them? not row 4
Show(:img[4] << get size);

Re: Comprimir imágenes (idénticas) en tablas de datos de JMPEl mismo truco se aplica cuando se apilan tablas con imágenes.
Sé valiente: puedes apilar miles de columnas y obtener miles de imágenes duplicadas; son clones y no consumen memoria.
¡Pero no te atrevas a salvar la mesa apilada!
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
dtstack = dt << Stack(
columns( :height, :weight )
);
:picture[1] << scale(5);
Show(:picture[1] << get size);
Show(:picture[2] << get size);
Re: Comprimir imágenes (idénticas) en tablas de datos de JMP...y consideremos los daños colaterales.
Son menos evidentes de lo que podrías pensar.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
Show(dt:picture[1] << get size);
dt sub = dt<< Subset( All rows, Selected columns only( 0 ) ); // non-linked subset
dt stack = dt << Stack(
columns( :height, :weight )
);
dt stack:picture[1] << scale(0.1);
Show(dt stack:picture[1] << get size);
Show(dt stack:picture[2] << get size);
Show(dt:picture[1] << get size);
Show(dt sub:picture[1] << get size);

Re: Comprimir imágenes (idénticas) en tablas de datos de JMPUn archivo JPG ya está optimizado para la compresión. A menudo, comprimir datos aleatorios, comprimidos o cifrados puede hacer que los datos aumenten en lugar de disminuir, ya que la compresión encuentra poco que comprimir y se añaden encabezados y datos de mantenimiento alrededor de los datos comprimidos. Si bien la tabla de datos guarda la imagen binaria como un blob base64 en un campo de cadena en la columna, para la compresión gzip sigue pareciendo un conjunto de datos mayoritariamente aleatorios.
Diría que la verdadera pregunta, que probablemente debería plantearse al soporte técnico de JMP (y, por ende, al desarrollador de la tabla de datos), es por qué no se guardan copias únicas y referencias en lugar de copias idénticas de la imagen. Supongo también que si se carga la tabla guardada, habrá un impacto en la memoria, ya que probablemente ahora sean distintas. Si la tabla de datos sabe que es idéntica en memoria, ¿por qué no mantiene esa identidad al guardarla?
Re: Comprimir imágenes (idénticas) en tablas de datos de JMP[ 00296024 ]
-> "
No es sorprendente que JMP no comprima una tabla de datos de forma que maximice la eficiencia en el almacenamiento de imágenes. Parece que todo funciona correctamente.
Re: Comprimir imágenes (idénticas) en tablas de datos de JMPDe hecho, la opción más sencilla sería: JMP reconoce que las imágenes son idénticas y utiliza esta información al almacenar el archivo.
Parece que, en memoria, JMP usa algo parecido a un 'puntero' y varios punteros apuntan a la misma imagen. -> coll cuando se genera la tabla.
Cuando JMP almacena el archivo, utiliza los punteros y, al trabajar con imágenes idénticas, las guarda una por una.
Sin embargo, me siguió sorprendiendo que el algoritmo de compresión de la columna no identificara los duplicados y los almacenara de forma eficiente.
Mi IA sugiere que (quizás por motivos de compatibilidad con versiones anteriores) JMP utiliza un mecanismo de compresión antiguo con una ventana de deflate pequeña. (JMP menciona gz en las preferencias). En ese caso, la primera imagen quedará fuera de la ventana de deflate cuando se procese la segunda.
Sugerencia de IA:
Cambiar a un esquema de compresión más moderno (¿zstd/lzma?) podría conllevar no solo una mejora significativa en la compresión de múltiples imágenes idénticas, sino también una mejor compresión de otros tipos de columnas.
Re: Comprimir imágenes (idénticas) en tablas de datos de JMPEl desarrollador está al tanto del problema y me indicó que lo está investigando. Originalmente, las imágenes no eran compatibles con las tablas de datos de JMP; su compatibilidad se añadió recientemente (en los últimos 10 años aproximadamente). Creo que cuando se agregó la compatibilidad con imágenes, se hizo de esta manera para que cambiar el formato del archivo .jmp fuera innecesario y compatible con versiones anteriores. En versiones anteriores de JMP, se mostraría como datos de cadena. También permite crear una tabla con imágenes mediante scripts. Es probable que solucionar esto requiera una actualización del formato del archivo .jmp. Posiblemente se almacene la imagen internamente como datos de tipo categórico o de lista, y preferiblemente una conversión de blob binario a base64.
Es estupendo que estés investigando estos problemas para que podamos solucionarlos. En definitiva, buscamos un buen rendimiento y un uso eficiente de la memoria en JMP.
Los datos no dejan de crecer.
Re: Comprimir imágenes (idénticas) en tablas de datos de JMPSuena genial.
Gracias por el debate abierto y las ideas aportadas

Nuestro objetivo común es lograr que JMP sea lo mejor posible: robusto, completo y refinado.
Debería seguir siendo la mejor herramienta de análisis del mundo. ... ¡ Y con el rápido avance de la IA, la competencia será aún más dura!
Re: Comprimir imágenes (idénticas) en tablas de datos de JMPSobresalir: Contenedor relacional (elimina las imágenes duplicadas mediante punteros).
JMP: Flujo de datos plano (duplica el binario de la imagen por fila).
— Afirmado por Gemini 3.1 Pro