Incorporation d'images dans des scripts JSLDe temps en temps, une question surgit qui engendre suffisamment de discussions pour que je pense qu’elles méritent d’être publiées dans un blog. Le sujet de discussion autour du refroidisseur d’eau virtuel de JMP est l’idée d’inclure une image dans un script JSL. Une discussion similaire a eu lieu il y a peu de temps et m'a incité à écrire un article de blog intitulé Comment ajouter une image à un graphique dans JMP 9 . Mais cette fois, la question initiale et la discussion qui a suivi ont été spécifiquement posées sur l'intégration de l'image dans le script, de sorte que le script ne dépende pas d'un fichier image externe. Un fil de discussion par courriel a commencé mardi et mercredi, il s'est retrouvé dans ma boîte de réception. Vendredi, je voyais encore plus de réponses au fil. JMP a décidé que s’il y avait autant d’intérêt au sein de JMP, il y en aurait certainement un peu plus tard. JMP communauté d'utilisateurs.
Alors pouvez-vous incorporer une image dans un script JSL afin que le fichier image d'origine ne soit plus nécessaire? La réponse est, bien sûr, Oui . (Si c'était non, je n'écrirais pas ce billet de blog!) Ironiquement, toute la discussion sur l'intégration d'images était en cours au moment même où j'écrivais mon dernier billet de blog Utiliser des images pour ajouter du contexte à vos données . Commençons donc là où celui-ci s'est arrêté.
Dans ce billet de blog, j'ai utilisé une table de données JMP pour générer un graphique à deux variables. Le graphique comprenait des flèches indiquant la vitesse et la direction du vent. J'ai ensuite ajouté une image au graphique. L'image était une carte de la région où les lectures de vent avaient eu lieu - autour du lac Michigan. Si je voulais enregistrer le graphique, je pourrais utiliser le petit triangle rouge (lrt) et sélectionner Script-> Enregistrer le script dans la fenêtre de script. Ceci écrirait le JSL nécessaire pour reproduire le graphique en entier. Si je le fais, je verrai le code suivant. (Ceci n'est qu'une partie du code réel.)
Ajouter une image(
Set Blob (
Char à Blob (
"625799eJM // 9WNs7G2 + 0s6euR1e ... Ix0RcMtzpWCTfj / AXh1fKw = ",
"base64compressed"
),
"png"
),
Bornes(
La gauche (- 90,96 ),
Droite (- 84.02 ),
Haut ( 44,97 ),
Bas ( 39.04 )
)
),
Si vous lisez Comment ajouter une image à un graphique dans JMP 9 , vous reconnaîtrez la commande Ajouter une image. Mais dans cet exemple, j'ai utilisé une référence de fichier, ce qui signifiait que la JSL dépendait d'un fichier image externe. Dans cet exemple, au lieu d’une référence de fichier, nous utilisons un goutte . Le blob est une longue chaîne de données de caractères compressée à l'aide de la compression base64. C'est la plus petite façon de stocker une image en tant que données de pixels dans un script. Au fait, le ... au milieu de la chaîne est de montrer que la majorité de la chaîne de caractères a été supprimée par souci de concision. La chaîne réelle est beaucoup plus longue que ce que j'ai montré ici. En plus des données de caractères compressés, le type d'image est également écrit. Ainsi, lorsque le script est lu, JMP sait interpréter les données de caractères stockées dans le blob. La bonne chose à propos de cela est que je peux générer le graphique que je veux, puis utiliser Enregistrer le script dans la fenêtre de script pour que JMP génère les données de caractère compressées pour moi. Je n'ai pas à comprendre comment le faire moi-même. Agréable!
À ce stade, vous vous demandez peut-être quelle est la taille du fichier de script. Eh bien, dans mon cas, le script sans l'image incorporée est de 1 Ko. Le fichier image est un fichier PNG de 26 Ko. Donc, les deux fichiers combinés seraient de 27 Ko. Si j'intègre l'image dans le fichier de script et l'enregistre sur le disque, le fichier de script mesure maintenant 34 Ko. Le script contenant l'image est donc plus volumineux que les deux fichiers individuels combinés. Mais, je dois admettre que j'ai été surpris de constater que ce n'était pas beaucoup plus gros. Le fichier PNG est un fichier binaire de données de pixels compressées. L'image incorporée dans le script est écrite en caractères ASCII. Je m'attendais donc à ce que le script soit beaucoup plus volumineux. Je suppose que différentes images auront des résultats différents. En d'autres termes, votre kilométrage peut varier.
Maintenant, je peux partager mon script JSL avec d'autres personnes et, lorsqu'ils l'exécutent dans JMP, ils verront mon graphique, ainsi que l'image. Et ils ne verront pas le message d'erreur dans le journal indiquant que le fichier image n'a pas pu être trouvé.
J'espère que vous apprécierez ce petit tour et, comme toujours, faites-le-moi savoir, s'il vous plaît.
John Ponte a écrit: La technique que j'ai montrée ici est conçue ... John Ponte a écrit:
La technique que j'ai montrée ici est conçue pour fonctionner avec des images telles que JPG ou PNG. Mais sur Mac, le pdf est considéré comme un format d'image. Vous pouvez donc convertir le pdf en un blob en ajoutant une image à un graphique, en utilisant la commande Open () et en spécifiant votre pdf comme image externe. Reportez-vous à "Comment ajouter une image à un graphique dans JMP 9" ci-dessus pour savoir comment procéder. Enregistrez ensuite ce script dans la fenêtre de script, ce qui convertira le fichier pdf en objet blob. Ensuite, vous pourriez écrire votre propre script qui afficherait l'image, en utilisant le blob comme source d'image. Une fois que vous avez le blob, vous pouvez vous débarrasser du graphique original que vous avez créé. C'était juste un moyen d'obtenir le pdf sous forme de blob. Cela a-t-il du sens?
mark cipollone a écrit: John, est-il possible d'intégrer eithe ... marque cipollone a écrit:
John,
Est-il possible d'intégrer un fichier PDF ou Powerpoint dans un fichier JMP quelque part? Ce que je voudrais faire, c'est incorporer le fichier, puis permettre à l'utilisateur de lancer / afficher le fichier via un script de table. L'idée est d'ajouter un script de table "Cliquez ici pour plus d'informations". Lorsqu'un utilisateur clique dessus, le fichier PDF ou PowerPoint est lancé. Il contient des informations plus détaillées sur le fichier JMP. J'aime l’idée de l’incorporer, car le fait de faire glisser un fichier séparé est toujours compliqué.
merci, Mark Cipollone.
John Ponte a écrit: Salut Amit, Pour reconvertir tu as juste ... John Ponte a écrit:
Salut Amit,
Pour reconvertir, il vous suffit de savoir quelles sont votre largeur et votre hauteur. Une image a une largeur et une hauteur mais une table de données a un certain nombre de lignes et de colonnes. Mais le nombre de colonnes correspond au nombre de variables uniques et non à l’une des dimensions de l’image. Si vous utilisez le code que je vous ai donné précédemment, vous connaissez la largeur et la hauteur de l'image d'origine. Si vous n'avez pas encore ces valeurs mais que vous savez que vous avez créé la table de données à partir du code ci-dessus, vous pouvez alors rechercher la valeur maximale dans les colonnes X et Y, ce qui vous donnerait votre largeur (max Y) et votre hauteur (max. X). En utilisant cette technique, il existe une hypothèse sur les valeurs dans ces deux colonnes, mais nous savons que cette hypothèse est vraie si vous avez créé la table de données à l'aide du code ci-dessus.
Donc, dans cet esprit, voici le code pour recréer l'image:
// Inverser le processus - recréer l'image à partir de la table de données
// Crée trois matrices (pour les couleurs de pixels)
r2 = J (numRows, numCols);
g2 = J (numRows, numCols);
b2 = J (numRows, numCols);
// Enregistrer les valeurs r, g, b pour chaque pixel
pour chaque rangée (
r2 [: y,: x] =: R;
g2 [: y,: x] =: G;
b2 [: y,: x] =: B;
)
// Enregistrer une nouvelle image
img2 = NewImage ("rgb", {r2, g2, b2});
img2 << saveImage ("C: \ JMP \ images \ newImage.png", png);
Remarquez que j'utilise un '2' devant les variables. Vous pouvez simplement réutiliser les mêmes variables qu'auparavant, mais je voulais tester mon code et m'assurer qu'il fonctionnait bien. Si vous avez réutilisé les mêmes variables, vous n'aurez plus à vous soucier de la largeur et de la hauteur ni à recréer les matrices. Il existe peut-être un moyen plus efficace de procéder, mais c’est la solution qui m’a fait mouche. En outre, notez que j'enregistre l'image au format PNG. Vous pouvez également utiliser un format différent, tel que JPG.
BTW - mon email est John.Ponte@jmp.com
Prendre plaisir!
amit bothra a écrit: Bonjour John, Merci pour la réponse. J'ai... Amit Bothra a écrit:
Salut John,
Merci pour la réponse. J'ai une autre demande. Comment puis-je convertir la table en une image. Le tableau comporte les colonnes suivantes: Y, X, R, G, B.
Avez-vous un email jmp je peux vous atteindre?
Cordialement,
Amit
John Ponte a écrit: Bonjour Amit, C'est sûr que c'est possible et elle ... John Ponte a écrit:
Salut Amit,
Ceci est certainement possible et voici la JSL pour le faire:
// Ouvrir / lire l'image dans JMP
img = NewImage ("$ SAMPLE_IMAGES \ tile.jpg");
// Obtenir les valeurs de couleur sous forme de 3 matrices distinctes
{r, g, b} = img << getPixels ("rgb");
// Obtenir les dimensions de l'image / matrices
numRows = nrow (r);
numCols = ncol (r);
// Créer une table de données
dt = New Table ("Pixel Data",
newColumn ("Y", valeurs définies (shape (repeat (1 :: numRows, numCols) `, numCols, numRows))),
newColumn ("X", valeurs définies (repeat (1 :: numCols, numRows))),
newColumn ("R", valeurs définies (r)),
newColumn ("G", valeurs de réglage (g)),
newColumn ("B", valeurs définies (b)),
)
Les valeurs x et y correspondent à l'emplacement du pixel dans l'image. Les valeurs r, g et b sont les composantes de couleur de chaque pixel, dans un espace colorimétrique normalisé (valeurs comprises entre 0,0 et 1,0). Il suffit de changer la première ligne pour référencer votre propre image et vous devriez être prêt à partir. Bien que vous souhaitiez également modifier le nom de la table de données.
Faites-moi savoir si vous avez d'autres questions et bonne chance!
John
amit bothra a écrit: Bonjour John, je veux créer un jeu de données fr ... Amit Bothra a écrit:
Salut John,
Je souhaite créer un jeu de données à partir d'une image comportant les colonnes suivantes: X, Y, r, b, g, où X et Y sont des coordonnées et R, V et B des couleurs. Est-ce possible dans JMP?
Mon idée est d’exécuter un cluster K moyens sur celui-ci. Ma source pour ceci est http://lamages.blogspot.com/2012/12/now-i-see-it-k-means-cluster-analysis.html#more
Cordialement,
Amit
Zoe Jewell a écrit: Très chouette! J'aime particulièrement la façon dont JM ... Zoe Jewell a écrit:
Très propre! J'aime particulièrement la manière dont JMP peut générer les données de caractères compressées.