JMPデータテーブルで(同一の)画像を圧縮するJMPには、画像をデータ列に保存する機能があります。
同じ画像を1000回保存しても非常に高速で、PCのメモリにも全く問題ありません。
しかし、ファイルをハードドライブに保存するには時間がかかり、かなりの容量も必要になります!
GZ圧縮を有効にしても効果はありません。

試してみてください - 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" ));
自動化とスクリプト作成コンテンツの構成Re: JMPデータテーブルで(同一)画像を圧縮するファイルが保存される前は、なぜJMPはこんなに速いのですか?
ユーザーから見ると、各行に画像が保存されているように見える。

しかし、JMPは元の画像への参照を保存するだけです。サイズを変更すると、そのリンクが明らかになります。
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: JMPデータテーブルで(同一)画像を圧縮する画像を含むテーブルを積み重ねる場合にも、同じ手法が使えます。
勇気を出して。何千もの列を積み重ねて、何千もの複製画像を作成できます。これらはクローンなので、メモリを消費しません。
しかし、積み重ねられたテーブルを救おうとしてはいけません!
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: JMPデータテーブルで(同一)画像を圧縮する…そして、付随的な損害についても考慮してください。
それらはあなたが思っているほど目立たないものです。
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: JMPデータテーブルで(同一)画像を圧縮するJPGは既に最適化された圧縮形式です。ランダムなデータ、圧縮されたデータ、または暗号化されたデータを圧縮すると、圧縮対象がほとんどないため、データサイズが縮小するどころか増大することがよくあります。これは、圧縮されたデータの周りにヘッダーや管理データが追加されるためです。確かに、データテーブルはバイナリ画像をbase64ブロブとして列の文字列フィールドに「保存」していますが、gzip圧縮から見ると、依然としてほとんどランダムなデータのように見えます。
本当の疑問は、おそらくJMPのテクニカルサポート(ひいてはデータテーブル開発者)に問い合わせるべきでしょうが、なぜここでは同一のイメージコピーではなく、単一のコピーと参照が保存されないのかということです。保存されたテーブルを読み込むと、おそらく異なるデータになっているため、メモリへの影響が生じることも想定されます。データテーブルがメモリ上で同一であることを認識しているのなら、なぜ保存時にその状態を維持しないのでしょうか。
Re: JMPデータテーブルで(同一)画像を圧縮する[ 00296024 ]
-> "
JMPが画像データの保存効率を最大化するような方法でデータテーブルを圧縮しないのは、驚くべきことではない。すべてが正しく機能しているようだ。
Re: JMPデータテーブルで(同一)画像を圧縮する実際、最も簡単な方法は、JMPが画像が同一であることを認識し、ファイル保存時にこの情報を使用することです。
メモリ内では、JMP は「ポインタ」のようなものを使用しており、複数のポインタが同じイメージを指しているようです。-> テーブルが生成されるときに coll が実行されます。
JMPがファイルを保存する際、ポインタを使用し、同一のイメージであれば問題なく、それらを1つずつ保存します。
しかし、列の圧縮アルゴリズムが重複データを識別せず、効率的に保存してしまうのは、やはり私にとっては驚きだった。
私のAIによると、(おそらく後方互換性の理由から?)JMPは、圧縮範囲が狭い古い圧縮方式を使用しているようです(JMPの設定でgzが言及されています)。その場合、2番目の画像が解析される際に、最初の画像が圧縮範囲外になってしまう可能性があります。
AIの提案:
より現代的な圧縮方式(zstd / lzmaなど)に切り替えることで、複数の同一画像の圧縮率が大幅に向上するだけでなく、他の列タイプの圧縮率も向上する可能性があります。
Re: JMPデータテーブルで(同一)画像を圧縮する開発者はこの問題を認識しており、調査中であると私に伝えました。JMP データ テーブルでは、元々画像はサポートされておらず、比較的最近(過去 10 年ほど)追加された機能です。画像サポートが追加された際、.jmp ファイル形式を変更する必要がないように、また下位互換性を保つために、このような方法で実装されたと考えられます。古いバージョンの JMP では、文字列データとして表示されます。また、スクリプトから画像を含むテーブルを作成することもできます。この問題を解決するには、.jmp ファイル形式の更新が必要になると思われます。カテゴリデータやリストチェックタイプのデータのように、画像を内部的に保存し、できればバイナリ ブロブではなく base64 変換を行うのが望ましいでしょう。
あなたがこれらの問題点を洗い出して修正してくれるのは素晴らしいことです。最終的には、JMPのパフォーマンス向上とメモリ使用量の最適化を実現したいと考えています。
データ量は増え続ける一方だ。
Re: JMPデータテーブルで(同一)画像を圧縮する素晴らしいですね。
率直な議論と貴重なご意見をありがとうございました:)
私たちの共通の目標は、JMPを可能な限り最高の状態にすること、つまり、堅牢で、バランスが良く、洗練されたものにすることです。
今後も世界最高の分析ツールであり続けるだろう。…そして、AIの急速な発展に伴い、競争はさらに激化するだろう!
Re: JMPデータテーブルで(同一)画像を圧縮するExcel: 関係コンテナ(ポインタを介して画像の重複を排除します)。
JMP: フラットデータストリーム(行ごとに画像バイナリを複製)。
— Gemini 3.1 Proによる発言