Komprimieren (identischer) Bilder in JMP-DatentabellenJMP bietet die Möglichkeit, Bilder in einer Datenspalte zu speichern.
Selbst das Speichern desselben Bildes 1000-fach geht superschnell – und stellt kein Problem für den Speicher des PCs dar.
Das Speichern der Datei auf der Festplatte dauert jedoch eine Weile und benötigt viel Speicherplatz!
Die Aktivierung der GZ-Komprimierung hilft nicht:

Probieren Sie es aus – warum funktioniert die GZ-Kompression nicht?
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" ));
Automatisierung und SkripterstellungInhaltsorganisationBetreff: Komprimierung (identischer) Bilder in JMP-DatentabellenWarum ist JMP so schnell, bevor die Dateien gespeichert werden?
Für den Benutzer scheint es so, als ob in jeder Zeile ein Bild gespeichert wird:

JMP speichert jedoch nur einen Verweis auf das Originalbild. Durch Ändern der Größe wird der Link sichtbar:
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);

Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenDer gleiche Trick funktioniert auch, wenn Tabellen mit Bildern gestapelt werden.
Seid mutig – ihr könnt Tausende von Spalten stapeln und Tausende von duplizierten Bildern erhalten – das sind Klone und verbrauchen keinen Speicherplatz.
Aber wage es ja nicht, den gestapelten Tisch zu retten!
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);
Betreff: Komprimierung (identischer) Bilder in JMP-Datentabellen... und berücksichtigen Sie die Kollateralschäden.
Sie sind weniger offensichtlich, als man vielleicht denkt.
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);

Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenJPG ist bereits eine optimierte Komprimierung. Oftmals führt die Komprimierung von zufälligen, komprimierten oder verschlüsselten Daten zu einer Vergrößerung statt Verkleinerung, da die Komprimierung nur wenig zu komprimieren findet und zusätzlich Header und Verwaltungsdaten um die komprimierten Daten herum hinzugefügt werden. Zwar speichert die Datentabelle das Binärbild als Base64-Blob in einem String-Feld der Spalte, aber für die Gzip-Komprimierung sieht es dennoch größtenteils wie zufällige Daten aus.
Die eigentliche Frage, die man wohl an den JMP-Support (und damit an den Entwickler der Datentabelle) weiterleiten sollte, ist, warum hier nicht einzelne Kopien und Referenzen anstelle identischer Bildkopien gespeichert werden. Ich gehe außerdem davon aus, dass das Laden der gespeicherten Tabelle den Speicherverbrauch erhöht, da die Daten nun wahrscheinlich unterschiedlich sind. Wenn die Datentabelle weiß, dass sie im Speicher identisch ist, warum behält sie diese Information nicht beim Speichern bei?
Betreff: Komprimierung (identischer) Bilder in JMP-Datentabellen[ 00296024 ]
-> "
Es ist nicht überraschend, dass JMP eine Datentabelle nicht so komprimiert, dass die Effizienz beim Speichern von Bildern maximiert wird. Anscheinend funktioniert alles korrekt.
Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenDie einfachste Option wäre in der Tat: JMP erkennt, dass die Bilder identisch sind und nutzt diese Information beim Speichern der Datei.
Anscheinend verwendet JMP im Speicher so etwas wie einen „Zeiger“, und mehrere Zeiger verweisen auf dasselbe Bild. -> coll, wenn die Tabelle generiert wird.
Wenn JMP die Datei speichert, verwendet es die Zeiger und ist mit identischen Bildern zufrieden, indem es sie nacheinander speichert.
Es hat mich jedoch trotzdem überrascht, dass der Komprimierungsalgorithmus für die Spalte die Duplikate nicht erkennt und sie effizient speichert.
Meine KI deutet darauf hin, dass JMP (möglicherweise aus Gründen der Abwärtskompatibilität?) einen älteren Komprimierungsmechanismus mit einem kleinen Deflate-Fenster verwendet. (JMP erwähnt gz in den Einstellungen.) In diesem Fall liegt das erste Bild außerhalb des Deflate-Fensters, wenn das zweite Bild analysiert wird.
KI-Vorschlag:
Der Wechsel zu einem moderneren Kompressionsverfahren (zstd / lzma?) könnte nicht nur zu einer deutlichen Verbesserung der Komprimierung mehrerer identischer Bilder führen, sondern auch zu einer besseren Komprimierung anderer Spaltentypen.
Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenDer Entwickler ist sich des Problems bewusst und hat mir mitgeteilt, dass er es untersucht. Bilder wurden ursprünglich nicht in JMP-Datentabellen unterstützt; diese Funktion wurde erst vor Kurzem (etwa in den letzten 10 Jahren) hinzugefügt. Ich gehe davon aus, dass die Bildunterstützung damals so implementiert wurde, um eine Änderung des .jmp-Dateiformats zu vermeiden und die Abwärtskompatibilität zu gewährleisten. In älteren JMP-Versionen wurden die Daten als Zeichenketten angezeigt. Außerdem ermöglicht dies das Erstellen von Tabellen mit Bildern per Skript. Die Behebung dieses Problems erfordert wahrscheinlich eine Aktualisierung des .jmp-Dateiformats. Möglicherweise sollten die Bilder intern wie kategoriale Daten oder Listendaten gespeichert werden, vorzugsweise als Binärdaten anstatt als Base64-Daten.
Es ist toll, dass Sie diese Probleme aufspüren, damit wir sie beheben können. Letztendlich wünschen wir uns in JMP eine hohe Leistung und eine optimale Speichernutzung.
Die Datenmengen nehmen immer weiter zu.
Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenKlingt super.
Vielen Dank für die offene Diskussion und die wertvollen Einblicke

Unser gemeinsames Ziel ist es, JMP so gut wie möglich zu machen – robust, vielseitig und ausgereift.
Es sollte weiterhin das beste Analysetool der Welt bleiben. ... Und mit dem rasanten Fortschritt der KI wird der Wettbewerb noch härter werden!
Betreff: Komprimierung (identischer) Bilder in JMP-DatentabellenExcel: Relationaler Container (dedupliziert Bilder mittels Zeigern).
JMP: Flacher Datenstrom (Bildbinärdaten werden in jeder Zeile dupliziert).
— Angegeben von Gemini 3.1 Pro