JSL 스크립트에 이미지 포함하기지금 당장은 블로그 포스트에 합당하다고 생각하는 충분한 토론을 불러 일으키는 질문이 생깁니다. JMP의 가상 워터 쿨러에 관한 토론 주제는 JSL 스크립트 안에 이미지를 포함시키는 아이디어입니다. 오래 전에 비슷한 토론이 생겨서 나에게 블로그 게시물을 쓰게되었습니다. JMP 9에서 그래프에 이미지를 추가하는 방법 . 그러나 이번에는 초기 질문과 이후의 토론에서 스크립트가 외부 이미지 파일에 종속되지 않도록 스크립트에 이미지를 포함시키는 방법에 대해 구체적으로 질문했습니다. 화요일에 전자 메일 스레드가 시작되었고 수요일에받은 편지함으로 들어갔다. 금요일까지 나는 여전히 스레드에 대한 응답을 더 많이보고있었습니다. JMP 내에서 많은 관심이 있었으면 결정했습니다. JMP 사용자 커뮤니티.
원본 이미지 파일이 더 이상 필요하지 않도록 JSL 스크립트 내에 이미지를 포함시킬 수 있습니까? 대답은 물론, 예 . (그렇지 않다면이 블로그 게시물을 쓰지 않을 것입니다!) 역설적이게도 이미지 삽입에 대한 전체 토론은 마지막 블로그 게시물을 쓰는 동시에 진행되었습니다. 이미지를 사용하여 데이터에 컨텍스트 추가 . 그 중 하나가 중단 된 곳부터 시작하겠습니다.
그 블로그 게시물에서 JMP 데이터 테이블을 사용하여 이변 변수 도표를 생성했습니다. 그래프에는 풍속과 방향을 나타내는 화살표가 포함됩니다. 그런 다음 그래프에 이미지를 추가했습니다. 이 이미지는 바람의 소리가 나는 지역의지도였습니다 - 미시간 호수 주변. 그래프를 저장하고 싶다면 작은 삼각형 (lrt)을 사용하고 스크립트 -> 스크립트를 스크립트에 저장 창을 선택할 수 있습니다. 이렇게하면 전체 그래프를 재현하는 데 필요한 JSL이 작성됩니다. 그렇게하면 다음 코드가 표시됩니다. (이것은 실제 코드의 일부일뿐입니다.)
이미지 추가 (
Blob 설정 (
Char to Blob (
"625799eJM // 9WNs7G2 + 0s6euR1e ... Ix0RcMtzpWCTfj / AXh1fKw = ",
"base64 압축"
),
"png"
),
범위(
왼쪽 (- 90.96 ),
권리 (- 84.02 ),
상단 ( 44.97 ),
바닥 ( 39.04 )
)
),
읽으면 JMP 9에서 그래프에 이미지를 추가하는 방법 이미지 추가 명령을 인식하게됩니다. 그러나이 예에서 파일 참조를 사용했는데, 이는 JSL이 외부 이미지 파일에 종속되어 있음을 의미합니다. 이 예제에서는 파일 참조 대신에 얼룩 . BLOB는 base64 압축을 사용하여 압축 된 긴 문자 데이터 문자열입니다. 이것은 이미지를 스크립트 내에서 픽셀 데이터로 저장하는 가장 작은 방법입니다. 그건 그렇고 ... 문자열 중간에 문자열의 대부분이 간결함을 위해 제거되었음을 보여줍니다. 실제 문자열은 여기에 표시된 것보다 훨씬 길다. 압축 된 문자 데이터 외에도 이미지 유형도 기록됩니다. 이것은 스크립트를 읽을 때 JMP가 blob에 저장된 문자 데이터를 해석하는 방법을 알고 있기 때문입니다. 이것에 대한 좋은 점은 원하는 그래프를 생성 한 다음 스크립트를 스크립트 창에 저장을 사용하여 JMP에서 압축 된 문자 데이터를 생성하도록 할 수 있다는 것입니다. 나는 그것을 스스로하는 법을 알아낼 필요가 없다. 좋은!
이 시점에서 스크립트 파일의 크기가 얼마나 큰지 궁금 할 것입니다. 글쎄, 내 경우, 이미지가 삽입되지 않은 스크립트는 1KB이다. 이미지 파일은 PNG 파일이며 26KB입니다. 따라서 두 파일을 결합하면 27KB가됩니다. 스크립트 파일에 이미지를 포함하고 디스크에 저장하면 스크립트 파일은 이제 34KB가됩니다. 따라서 이미지가 포함 된 스크립트는 두 개의 개별 파일을 결합한 것보다 큽니다. 그러나 나는 그것이 훨씬 크지 않다는 것에 놀랐다. PNG 파일은 압축 된 픽셀 데이터의 이진 파일입니다. 스크립트에 임베드 된 이미지는 ASCII 문자로 기록됩니다. 그래서 나는 그 대본이 훨씬 더 커질 것으로 기대했다. 다른 이미지가 다른 결과를 가져올 것이라고 가정합니다. 즉, 귀하의 마일리지가 다를 수 있습니다.
이제 JSL 스크립트를 다른 사람들과 공유 할 수 있습니다. JMP에서 JSL 스크립트를 실행하면 내 그래프가 표시되고 이미지가 완성됩니다. 그리고 이미지 파일을 찾을 수 없다는 오류 메시지가 로그에 표시되지 않습니다.
이 작은 트릭을 즐기시기 바랍니다. 언제나처럼, 저에게 당신의 생각을 알려 주시기 바랍니다.
존 폰 테 (John Ponte)는 다음과 같이 적었습니다. 존 폰테 쓴 :
여기에 설명 된 기술은 JPG 또는 PNG와 같은 이미지로 작업하도록 설계되었습니다. 그러나 Mac에서는 pdf가 이미지 형식으로 간주됩니다. 따라서 Open () 명령을 사용하여 그래프에 이미지를 추가하고 pdf를 외부 이미지로 지정하여 pdf를 blob로 변환 할 수 있습니다. 위의 방법을 보려면 위의 "JMP 9의 그래프에 이미지 추가하는 방법"을 참조하십시오. 그런 다음 해당 스크립트를 스크립트 창에 저장하면 pdf가 blob로 변환됩니다. 그런 다음 blob을 이미지 소스로 사용하여 이미지를 표시하는 자체 스크립트를 작성할 수 있습니다. 방울이 있으면 원래 만든 그래프를 제거 할 수 있습니다. 그것은 방울이로 pdf를 얻는 단지 방법이었습니다. 말이 돼?
마크 cipollone 쓴 : 존, eithe를 포함시킬 수 있습니까? 마크 cipollone 쓴 :
남자,
PDF 또는 Powerpoint 파일을 JMP 파일 내에 임베드 할 수 있습니까? 내가하고 싶은 것은 파일을 삽입 한 다음 사용자가 테이블 스크립트를 통해 파일을 시작하거나 볼 수있게하는 것입니다. 아이디어는 '자세한 정보를 보려면 여기를 클릭하십시오'테이블 스크립트를 추가하는 것입니다. 사용자가 클릭하면 PDF 또는 파워 포인트 파일이 실행되고 JMP 파일에 대한 자세한 정보가 표시됩니다. 나는 별도의 파일을 따라 드래그하는 것이 항상 지저분하기 때문에 그것을 포함시키는 아이디어를 좋아한다.
감사합니다, Mark Cipollone.
John Ponte는 다음과 같이 썼습니다. 안녕하세요, Amit 님. 존 폰테 쓴 :
안녕 아 미트,
뒤쪽으로 변환하려면 너비와 높이가 무엇인지 알아야합니다. 이미지의 너비와 높이가 있지만 데이터 테이블에는 몇 개의 행과 열이 있습니다. 그러나 열의 수는 이미지의 차원 중 하나가 아닌 고유 한 변수의 수에 해당합니다. 이전에 준 코드를 사용하면 원본 이미지의 너비와 높이를 알 수 있습니다. 위의 값을 가지고 있지 않지만 위 코드에서 데이터 테이블을 만든 경우 X와 Y 열 모두에서 최대 값을 찾을 수 있습니다. 그러면 너비 (최대 Y)와 너비 높이 (최대 X). 이 기술을 사용하면이 두 열의 값에 대한 가정이 있지만 위 코드에 따라 데이터 테이블을 만든 경우에는 가정이 사실임을 알 수 있습니다.
이 점을 염두에두고 이미지를 다시 작성하는 코드는 다음과 같습니다.
// reverse process - 데이터 테이블에서 이미지를 다시 만듭니다.
// 세 개의 행렬을 만듭니다 (픽셀 색상 용).
r2 = J (numRows, numCols);
g2 = J (numRows, numCols);
b2 = J (numRows, numCols);
// 각 픽셀의 r, g, b 값을 저장합니다.
각 행에 대해 (
r2 [: y, : x] = : R;
g2 [: y, : x] = : G;
b2 [: y, : x] = : B;
);
// 새 이미지 저장
img2 = NewImage ( "rgb", {r2, g2, b2});
img2 << saveImage ( "C : \ JMP \ images \ newImage.png", png);
유의 사항 변수 앞에 '2'를 사용합니다. 이전과 같은 변수를 재사용 할 수는 있지만 코드를 테스트하여 제대로 작동하는지 확인하고 싶었습니다. 같은 변수를 재사용한다면 너비와 높이에 대해 걱정할 필요가 없으며 행렬을 다시 만들 수 있습니다. 실제로는 이렇게하는 것이 더 효율적인 방법 일 수 있지만 이것은 내 머리 꼭대기에서 나를 때리는 해결책입니다. 또한 이미지를 PNG로 저장합니다. JPG와 같이 다른 형식을 사용할 수도 있습니다.
BTW - 내 이메일은 John.Ponte@jmp.com입니다.
즐겨!
amit bothra는 썼습니다 : 안녕하세요, John, 답장을 보내 주셔서 감사합니다. 나는 가지고있다... 양면에 서다. 쓴 :
안녕 존,
답장을 보내 주셔서 감사합니다. 추가 요청이 하나 더 있습니다. 어떻게 테이블을 다시 이미지로 변환합니까? 표의 열은 Y, X, R, G, B입니다.
내가 당신에게 연락 할 수있는 jmp 이메일을 가지고 있습니까?
문안 인사,
Amit
John Ponte는 다음과 같이 썼습니다. 안녕하세요, Amit,이게 가능하고 그녀는 ... 존 폰테 쓴 :
안녕 아 미트,
이것은 확실히 가능하며 여기서는 JSL을 사용합니다.
// JMP로 이미지 열기 / 읽기
img = NewImage ( "$ SAMPLE_IMAGES \ tile.jpg");
// 색상 값을 3 개의 별개의 행렬로 가져옵니다.
{r, g, b} = img << getPixels ( "rgb");
// 이미지 / 행렬의 크기를 가져옵니다.
numRows = nrow (r);
numCols = ncol (r);
// 데이터 테이블을 만듭니다.
dt = 새 표 ( "픽셀 데이터",
newColumn ( "Y", 설정 값 (shape (repeat :: 1 : numRows, numCols)`, numCols, numRows)))
newColumn ( "X", 값 설정 (repeat (1 :: numCols, numRows))),
newColumn ( "R", set values (r)),
newColumn ( "G", 값 (g) 설정),
newColumn ( "B", 값 (b) 설정),
);
x와 y 값은 이미지의 픽셀 위치입니다. r, g 및 b 값은 표준화 된 색상 공간 (0.0과 1.0 사이의 값)에서 각 픽셀의 색상 구성 요소입니다. 첫 번째 줄을 자신의 이미지를 참조하도록 변경하면 좋은 것이 좋습니다. 데이터 테이블의 이름을 변경할 수도 있습니다.
다른 질문이나 행운을 빕니다.
남자
amit bothra는 썼습니다 : 안녕하세요, 저는 데이터 셋을 만들고 싶습니다 ... 양면에 서다. 쓴 :
안녕 존,
X, Y, r, b, g 여기서 X와 Y는 좌표이고 R, G 및 B는 색상입니다. 이것은 JMP에서 가능합니까?
내 아이디어는 그것에 K 의미 클러스터를 실행하는 것입니다. 내 소스는 http://lamages.blogspot.com/2012/12/now-i-see-it-k-means-cluster-analysis.html#more
문안 인사,
Amit
Zoe Jewell은 다음과 같이 썼습니다. 나는 특히 JM을 좋아한다. 조이 쥬얼 쓴 :
매우 청초한! 나는 특히 JMP가 압축 된 문자 데이터를 생성 할 수있는 방식을 좋아한다.