Incorporamento di immagini in script JSLOgni tanto sorge una domanda che genera una discussione sufficiente che penso sia degna di un post sul blog. L'argomento di discussione attorno al dispositivo di raffreddamento dell'acqua virtuale di JMP questa volta è l'idea di includere un'immagine all'interno di uno script JSL. Una discussione simile è nata poco tempo fa e mi ha spinto a scrivere un post sul blog chiamato Come aggiungere un'immagine a un grafico in JMP 9 . Ma questa volta la domanda iniziale e la successiva discussione hanno chiesto specificamente di incorporare l'immagine nello script in modo tale che lo script non dipenda da un file di immagine esterno. Martedì è iniziata una discussione via email e mercoledì è entrata nella mia casella di posta. Per venerdì, stavo ancora vedendo più risposte al thread. Ho deciso se c'era molto interesse all'interno di JMP, sicuramente ci sarebbe stato un certo interesse in tutto il JMP comunità di utenti.
Quindi puoi incorporare un'immagine all'interno di uno script JSL in modo che il file di immagine originale non sia più necessario? La risposta è, ovviamente, sì . (Se fosse no, non scriverei questo post sul blog!) Ironia della sorte, l'intera discussione sull'incorporazione delle immagini stava succedendo nello stesso momento in cui stavo scrivendo il mio ultimo post sul blog, Utilizzare le immagini per aggiungere contesto ai dati . Quindi iniziamo da dove è stato interrotto.
In quel post del blog, ho usato una tabella di dati JMP per generare un grafico bivariato. Il grafico includeva frecce che mostravano la velocità e la direzione del vento. Ho quindi aggiunto un'immagine al grafico. L'immagine era una mappa dell'area in cui si svolgevano le letture del vento, attorno al lago Michigan. Se volessi salvare il grafico, potrei usare il triangolino rosso (lrt) e selezionare Script-> Salva script nella finestra dello script. Questo scriverebbe il JSL necessario per riprodurre l'intero grafico. Se lo faccio, vedrò il seguente codice. (Questa è solo una parte del codice effettivo.)
Aggiungi immagine(
Imposta blob (
Char To Blob (
"625799eJM // 9WNs7G2 + 0s6euR1e ... Ix0RcMtzpWCTfj / AXh1fKw =",
"Base64compressed"
),
"Png"
),
Bounds (
Sinistra (- 90.96 ),
Destra (- 84.02 ),
Superiore ( 44.97 ),
Parte inferiore ( 39.04 )
)
),
Se leggi Come aggiungere un'immagine a un grafico in JMP 9 , riconoscerai il comando Aggiungi immagine. Ma in quell'esempio, ho usato un riferimento al file, il che significava che il JSL dipendeva da un file immagine esterno. In questo esempio, invece di un riferimento al file, stiamo usando a macchia . Il blob è una lunga stringa di dati di carattere che è stata compressa utilizzando la compressione base64. Questo è il modo più piccolo per memorizzare un'immagine come dati di pixel all'interno di uno script. A proposito, il ... nel mezzo della stringa è mostrare che la maggior parte della stringa di caratteri è stata rimossa per brevità. La stringa effettiva è molto più lunga di quella che ho mostrato qui. Oltre ai dati dei caratteri compressi, anche il tipo di immagine è scritto. In questo modo, quando lo script viene letto, JMP sa come interpretare i dati dei caratteri memorizzati nel blob. La cosa bella di questo è che posso generare il grafico che voglio e quindi usare Salva Script in Script Window per far sì che JMP generi i dati del carattere compresso per me. Non devo capire come farlo da solo. Bello!
A questo punto ti starai chiedendo quanto è grande il file di script adesso. Bene, nel mio caso, lo script senza l'immagine incorporata è 1 KB. Il file immagine è un file PNG e ha una dimensione di 26 KB. Quindi i due file combinati sarebbero 27 KB. Se incorporo l'immagine nel file di script e la salviamo su disco, il file di script è ora di 34 KB. Quindi lo script che contiene l'immagine è più grande dei due singoli file combinati. Ma, devo ammettere, sono rimasto sorpreso dal fatto che non fosse molto più grande. Il file PNG è un file binario di dati di pixel compressi. L'immagine incorporata nello script è scritta come caratteri ASCII. Quindi mi aspettavo che la sceneggiatura fosse molto più grande. Suppongo che immagini diverse avranno risultati diversi. In altre parole, il tuo chilometraggio può variare.
Ora posso condividere il mio script JSL con altri, e quando lo eseguono in JMP, vedranno il mio grafico, completo con l'immagine. E non vedranno il messaggio di errore nel registro che dice che il file di immagine non può essere trovato.
Spero che vi piaccia questo piccolo trucco e, come sempre, per favore fatemi sapere cosa ne pensate.
John Ponte ha scritto: La tecnica che ho mostrato qui è stata progettata ... John Ponte ha scritto:
La tecnica che ho mostrato qui è progettata per funzionare con immagini come JPG o PNG. Ma su Mac, il pdf è considerato un formato immagine. In questo modo è possibile convertire il pdf in un blob aggiungendo un'immagine a un grafico, utilizzando il comando Apri () e specificando il pdf come immagine esterna. Fare riferimento a "Come aggiungere un'immagine a un grafico in JMP 9", sopra, per vedere come farlo. Quindi salva lo script nella finestra dello script, che convertirà il pdf in un blob. Quindi è possibile scrivere il proprio script che visualizzerà l'immagine, utilizzando il blob come origine dell'immagine. Una volta ottenuto il blob, puoi eliminare il grafico originale che hai creato. Era solo un modo per ottenere il pdf come un blob. Ha senso?
mark cipollone ha scritto: John, è possibile incorporare eithe ... marchio cipollone ha scritto:
John,
È possibile incorporare un file PDF o Powerpoint all'interno di un file JMP da qualche parte? Quello che mi piacerebbe fare è incorporare il file e quindi consentire all'utente di avviare / visualizzare il file tramite uno script di tabella. L'idea è di aggiungere uno script "Fai clic qui per ulteriori informazioni". Quando un utente fa clic, viene avviato il file PDF o PowerPoint, che presenterà informazioni più dettagliate per il file JMP. Mi piace l'idea di incorporarlo, poiché il trascinamento lungo un file separato è sempre disordinato.
grazie, Marco Cipollone.
John Ponte ha scritto: Ciao Amit, per riconvertire hai solo ... John Ponte ha scritto:
Ciao Amit,
Per riconvertire devi solo sapere qual è la tua larghezza e altezza. Un'immagine ha una larghezza e un'altezza ma una tabella di dati ha un certo numero di righe e colonne. Ma il numero di colonne corrisponde al numero di variabili univoche, non a una delle dimensioni dell'immagine. Se usi il codice che ti ho dato in precedenza, allora conosci la larghezza e l'altezza dall'immagine originale. Se non hai ancora quei valori ma sai che hai creato la tabella dati dal codice sopra, allora potresti cercare il valore massimo in entrambe le colonne X e Y e questo ti darebbe la larghezza (max Y) e il tuo altezza (max X). Usando questa tecnica, c'è un'ipotesi sui valori in queste due colonne, ma sappiamo che l'ipotesi è vera se hai creato la tabella di dati per il codice sopra.
Quindi, con questo in mente, ecco il codice per ricreare l'immagine:
// Processo inverso: ricrea l'immagine dalla tabella dei dati
// Crea tre matrici (per i colori dei pixel)
r2 = J (numRows, numCols);
g2 = J (numRows, numCols);
b2 = J (numRows, numCols);
// Salva i valori r, g, b per ciascun pixel
per ogni riga (
r2 [: y,: x] =: R;
g2 [: y,: x] =: G;
b2 [: y,: x] =: B;
);
// Salva nuova immagine
img2 = NewImage ("rgb", {r2, g2, b2});
img2 << saveImage ("C: \ JMP \ images \ newImage.png", png);
Notate che uso un "2" davanti alle variabili. Potresti semplicemente riutilizzare le stesse variabili di prima, ma volevo testare il mio codice e assicurarmi che funzionasse. Se hai riutilizzato le stesse variabili, non dovresti preoccuparti della larghezza e dell'altezza o creare nuovamente le matrici. Potrebbe esserci in realtà un modo più efficiente per farlo, ma questa è la soluzione che mi ha colpito in cima alla mia testa. Inoltre, nota che salvi l'immagine come PNG. Potresti anche usare un formato diverso, come JPG.
A proposito, la mia email è John.Ponte@jmp.com
Godere!
Amit Bothra ha scritto: Ciao John, grazie per la risposta. Io ho... amit bothra ha scritto:
Ciao John,
Grazie per la risposta. Ho ancora una richiesta. Come faccio a convertire la tabella in un'immagine. La tabella ha le seguenti colonne: Y, X, R, G, B.
Hai una email JMP a cui posso contattarti?
Saluti,
Amit
John Ponte ha scritto: Ciao Amit, questo è certo possibile e lei ... John Ponte ha scritto:
Ciao Amit,
Questo è sicuro e qui è il JSL per farlo:
// Apri / legge l'immagine in JMP
img = NewImage ("$ SAMPLE_IMAGES \ tile.jpg");
// Ottieni i valori del colore come 3 matrici distinte
{r, g, b} = img << getPixels ("rgb");
// Ottieni le dimensioni dell'immagine / delle matrici
numRows = nrow (r);
numCols = ncol (r);
// Crea una tabella di dati
dt = New Table ("Pixel Data",
newColumn ("Y", imposta valori (shape (repeat (1 :: numRows, numCols) `, numCols, numRows))),
newColumn ("X", imposta valori (ripeti (1 :: numCols, numRows))),
newColumn ("R", imposta valori (r)),
newColumn ("G", imposta valori (g)),
newColumn ("B", imposta valori (b)),
);
I valori xey sono la posizione dei pixel nell'immagine. I valori r, g e b sono le componenti cromatiche di ciascun pixel, nello spazio colore normalizzato (valori compresi tra 0.0 e 1.0). Basta modificare la prima riga per fare riferimento alla propria immagine e si dovrebbe essere a posto. Sebbene tu possa anche voler cambiare il nome della tabella di dati.
Fatemi sapere se avete altre domande e buona fortuna!
John
amit bothra ha scritto: Ciao John, voglio creare un set di dati per ... amit bothra ha scritto:
Ciao John,
Voglio creare un set di dati da un'immagine con le seguenti colonne: X, Y, r, b, g dove X e Y sono coordinate e R, G e B sono i colori. È possibile in JMP.
La mia idea è di eseguire un cluster K significa su di esso. La mia fonte per questo è http://lamages.blogspot.com/2012/12/now-i-see-it-k-means-cluster-analysis.html#more
Saluti,
Amit
Zoe Jewell ha scritto: Molto pulito! Mi piace soprattutto il modo in cui JM ... Zoe Jewell ha scritto:
Molto pulito! Mi piace soprattutto il modo in cui JMP può generare i dati dei caratteri compressi.