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" ));
자동화 및 스크립팅콘텐츠 구성제목: 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);

제목: 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);
제목: 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);

제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련JPG는 이미 최적화된 압축 형식입니다. 무작위로 압축되거나 암호화된 데이터를 압축하면 오히려 데이터 크기가 커지는 경우가 많은데, 이는 압축할 데이터가 거의 없기 때문이며, 압축된 데이터 주변에 헤더와 관리 데이터가 추가되기 때문입니다. 데이터 테이블이 바이너리 이미지를 base64로 인코딩된 문자열 형태로 해당 열에 '저장'하는 것은 맞지만, gzip 압축 방식에서는 여전히 대부분 무작위 데이터처럼 보입니다.
제 생각에 진짜 문제는, 아마도 JMP 기술 지원팀(그리고 데이터 테이블 개발자)에 전달해야 할 질문일 텐데, 왜 동일한 이미지 복사본 대신 단일 복사본과 참조를 저장하는가 하는 것입니다. 저장된 테이블을 로드하면 이제 서로 다른 데이터가 되기 때문에 메모리 사용량이 증가할 것이라고 예상합니다. 데이터 테이블이 메모리상에서 동일하다는 것을 알고 있다면, 저장 시에도 그 상태를 유지하지 않는 이유는 무엇일까요?
제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련[ 00296024 ]
-> "
JMP가 이미지 저장 효율을 극대화하는 방식으로 데이터 테이블을 압축하지 않는다는 것은 놀라운 일이 아닙니다. 모든 것이 정상적으로 작동하는 것 같습니다.
제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련사실 가장 쉬운 방법은 JMP가 이미지가 동일하다는 것을 인식하고 이 정보를 사용하여 파일을 저장하는 것입니다.
메모리에서 JMP는 '포인터'와 같은 것을 사용하는데, 여러 포인터가 동일한 이미지를 가리키는 것 같습니다. -> 테이블이 생성될 때 coll이 발생합니다.
JMP는 파일을 저장할 때 포인터를 사용하며, 동일한 이미지를 하나씩 저장하여 문제없이 처리합니다.
하지만 해당 열의 압축 알고리즘이 중복 항목을 식별하고 효율적으로 저장하지 않는다는 점은 여전히 놀라웠습니다.
제 AI는 (아마도 하위 호환성 때문일까요?) JMP가 작은 deflate 윈도우를 사용하는 구형 압축 메커니즘을 사용한다고 제안합니다. (JMP 환경 설정에서 gz를 언급합니다.) 이 경우 두 번째 이미지를 파싱할 때 첫 번째 이미지가 deflate 윈도우 밖에 있게 됩니다.
AI 추천:
보다 현대적인 압축 방식(zstd/lzma?)으로 전환하면 동일한 이미지 여러 개를 압축하는 데 있어 상당한 개선이 있을 뿐만 아니라 다른 열 유형의 압축률도 향상될 수 있습니다.
제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련개발자는 해당 문제를 인지하고 있으며, 조사 중이라고 제게 알려주었습니다. JMP 데이터 테이블은 원래 이미지를 지원하지 않았으며, 최근(약 10년 전)에 추가된 기능입니다. 이미지 지원이 추가될 당시, .jmp 파일 형식을 변경할 필요 없이 이전 버전과의 호환성을 유지하기 위해 이러한 방식으로 구현된 것으로 보입니다. 이전 버전의 JMP에서는 이미지가 문자열 데이터로 표시됩니다. 또한 스크립트를 통해 이미지가 포함된 테이블을 생성할 수 있습니다. 이 문제를 해결하려면 .jmp 파일 형식을 업데이트해야 할 가능성이 높습니다. 범주형 또는 목록형 데이터처럼 이미지를 내부적으로 저장하고, base64 변환 대신 바이너리 데이터로 저장하는 방식이 바람직할 수 있습니다.
저희가 해결할 수 있도록 이러한 문제들을 찾아내 주셔서 정말 감사합니다. 궁극적으로 저희는 JMP에서 뛰어난 성능과 효율적인 메모리 사용을 원합니다.
데이터는 점점 더 방대해지고 있습니다.
제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련좋네요.
자유로운 토론과 귀중한 의견 감사드립니다

우리의 공동 목표는 JMP를 가능한 한 최고의 소프트웨어, 즉 견고하고, 균형 잡히고 , 세련된 소프트웨어로 만드는 것입니다.
앞으로도 세계 최고의 분석 도구로서의 위상을 유지해야 할 것입니다. ... 그리고 인공지능의 급속한 발전으로 경쟁은 더욱 치열해질 것입니다!
제목: JMP 데이터 테이블에서 (동일한) 이미지 압축 관련뛰어나다관계형 컨테이너(포인터를 통해 이미지 중복 제거).
JMP평면 데이터 스트림(행마다 이미지 바이너리를 복제함).
Gemini 3.1 Pro에서 언급함