Comprimi le immagini (identiche) in JMP Data TablesJMP ha la capacità di memorizzare le immagini in una colonna di dati.
Anche memorizzare la stessa immagine 1000 volte è velocissimo e non rappresenta un problema per la memoria del PC.
Ma salvare il file sul disco rigido richiede tempo e molto spazio!
Attivare la compressione GZ non risolve il problema:

Provateci: perché la compressione GZ non funziona?
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" ));
Automazione e scriptingOrganizzazione dei contenutiOggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPPrima che i file vengano salvati, perché JMP è così veloce?
Per l'utente sembra che in ogni riga venga salvata un'immagine:

Ma JMP memorizza solo un riferimento all'immagine originale. Modificando le dimensioni si scopre il collegamento:
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);

Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPLo stesso trucco si applica quando si impilano tabelle contenenti immagini.
Abbiate coraggio: potete sovrapporre migliaia di colonne e ottenere migliaia di immagini duplicate; si tratta di cloni che non consumano memoria.
Ma non osate salvare il tavolo impilato!
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);
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMP...e bisogna considerare i danni collaterali.
Sono meno evidenti di quanto si possa pensare.
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);

Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPUn'immagine JPG è già di per sé una compressione ottimizzata. Spesso, comprimere dati casuali, compressi o crittografati può far sì che i dati aumentino anziché ridursi, poiché la compressione trova poco da comprimere e si aggiungono intestazioni e dati di gestione attorno ai dati compressi. Sì, la tabella dati "salva" l'immagine binaria come un blob base64 in un campo stringa nella colonna, ma per la compressione gzip appare comunque come una quantità di dati perlopiù casuale.
Direi che la vera domanda, probabilmente da rivolgere all'assistenza tecnica di JMP (e quindi allo sviluppatore della tabella dati), è perché non vengano salvate copie singole e riferimenti anziché copie immagine identiche. Presumo inoltre che, caricando la tabella salvata, ci sarà un impatto sulla memoria, dato che ora le due parti sono probabilmente distinte. Se la tabella dati sa di essere identica in memoria, perché non mantiene questa informazione al momento del salvataggio?
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMP[ 00296024 ]
-> "
Non sorprende che JMP non comprimi una tabella di dati in modo da massimizzare l'efficienza per l'archiviazione delle immagini. Sembra che tutto funzioni correttamente.
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPIn effetti, l'opzione più semplice sarebbe: JMP riconosce che le immagini sono identiche e utilizza questa informazione durante il salvataggio del file.
Sembra che, in memoria, JMP utilizzi qualcosa di simile a un 'puntatore' e che più puntatori puntino alla stessa immagine. -> coll quando viene generata la tabella.
Quando JMP salva il file, utilizza i puntatori e si accontenta di immagini identiche, memorizzandole una alla volta.
Tuttavia, mi ha comunque sorpreso che l'algoritmo di compressione per la colonna non identifichi i duplicati e non li memorizzi in modo efficiente.
La mia IA suggerisce che (forse per motivi di compatibilità con le versioni precedenti?) JMP utilizzi un vecchio meccanismo di compressione con una piccola finestra di deflate. (JMP menziona gz nelle preferenze). In tal caso, la prima immagine si troverà al di fuori della finestra di deflate quando la seconda immagine verrà elaborata.
Suggerimento basato sull'intelligenza artificiale:
Il passaggio a uno schema di compressione più moderno (zstd/lzma?) potrebbe portare non solo a un significativo miglioramento nella compressione di più immagini identiche, ma anche a una migliore compressione di altri tipi di colonne.
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPLo sviluppatore è a conoscenza del problema e mi ha comunicato che se ne sta occupando. Le immagini non erano originariamente supportate nelle tabelle dati di JMP, sono state aggiunte più di recente (negli ultimi 10 anni circa). Credo che quando è stato aggiunto il supporto per le immagini, sia stato implementato in questo modo per rendere superflua la modifica del formato del file .jmp e per garantire la compatibilità con le versioni precedenti. Nelle versioni precedenti di JMP, le immagini venivano visualizzate come dati di tipo stringa. Questo permette anche di creare tabelle con immagini tramite script. La risoluzione di questo problema richiederà probabilmente un aggiornamento del formato del file .jmp. Forse memorizzando l'immagine internamente come dati categorici o di tipo elenco, e preferibilmente convertendo il formato da blob binario a base64.
È fantastico che tu stia individuando questi problemi in modo che possiamo risolverli. In definitiva, ciò che desideriamo è ottenere prestazioni ottimali e un utilizzo efficiente della memoria in JMP.
La quantità di dati è in continua crescita.
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPSembra fantastico.
Grazie per la discussione aperta e per gli spunti di riflessione

Il nostro obiettivo comune è rendere JMP il migliore possibile: robusto, completo e raffinato.
Dovrebbe continuare a essere il miglior strumento di analisi al mondo. ... E con il rapido avvento dell'intelligenza artificiale, la concorrenza si farà più agguerrita!
Oggetto: Comprimere immagini (identiche) nelle tabelle dati di JMPEccellereContenitore relazionale (elimina i duplicati delle immagini tramite puntatori).
JMPFlusso di dati piatto (duplica i dati binari dell'immagine per riga).
— Affermazione di Gemini 3.1 Pro