recadrer l'image et la stocker dans une nouvelle colonneJe voulais recadrer les images et stocker les images recadrées dans une nouvelle colonne.
Ma première approche a été :
for each row (:new col = :old col << crop(...))
... mais ensuite j'ai trouvé le post de @Craige_Hales dans la communauté,
https://community.jmp.com/t5/Discussions/Crop-a-JPG-Image/mp/442473/highlight/true#M69072
avec les informations importantes :

Alors, j'ai essayé ceci :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row (:pet = :picture );
wait(0);
for each row (:pet << Crop( Left( 5 ), Right( 10 ), Top( 6 ), Bottom( 100 ) ));
... sans effet.
Dans l'index des scripts, j'ai trouvé :

Peut-être utiliser image comme variable temporaire ?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row( img= :picture;;img << Crop( Left( 5 ), Right( 70 ), Top( 30 ), Bottom( 50 ) );:pet = img)
et en effet :

Mais après avoir cliqué sur le tableau de données, j'ai remarqué que la colonne d'entrée avait également été modifiée :

donc, mon script final était :
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row( img= new image(:picture);img << Crop( Left( 5 ), Right( 70 ), Top( 30 ), Bottom( 50 ) );:pet = img)
- utilisez nouvelle image() pour créer une nouvelle image
- redimensionner cette image
- stockez-le dans la nouvelle colonne
Automatisation et scriptsRe: recadrer l'image et la stocker dans une nouvelle colonneMalheureusement, avec mon ensemble de données actuel, seules certaines images ont été recadrées.
L'explication simple : j'ai rempli la colonne image via copier/coller à partir d'une présentation Powerpoint.
Toutes les images avaient le même rapport hauteur/largeur, donc la même taille dans la grille de données JMP, mais pas la même taille réelle ! Le recadrage fonctionne uniquement si les valeurs en pixels des arguments sont inférieures à la taille réelle de l'image.
Beaucoup plus facile à détecter lorsque vous utilisez des images avec des rapports hauteur/largeur différents (en essayant de créer un cas de démonstration pour une publication communautaire).

Open( "$SAMPLE_DATA/SAS Offices.jmp" );
New Column( "cropped", Expression);
for each row( img= new image(:Photo);
{w, h} = img << Get Size;
img << Crop( Left( 10 ), Right( 800 ), Top( 10 ), Bottom( 70 ) );:cropped = img)
donc, mon script final était :
Open( "$SAMPLE_DATA/SAS Offices.jmp" );
New Column( "cropped", Expression );
For Each Row(
try(img = New Image( :Photo );
{w, h} = img << Get Size;
target = 500;
img << scale( 500 / w );
{w, h} = img << Get Size;
img << Crop( Left( Round( w / 3 ) ), Right( Round( w / 3 * 2 ) ), Top( Round( h / 10 ) ), Bottom( Round( h / 5 ) ) );
:cropped = img;)
);
Essayer ? -> juste au cas où l'une des images manquerait.
Re: recadrer l'image et la stocker dans une nouvelle colonneCe n'est pas difficile.
Je pense que la partie difficile est de rendre l'arrière-plan d'une image transparent et de le superposer à d'autres images.
JSL n'a pas pour fonction de rendre l'arrière-plan des images transparent.
Cela ne peut être réalisé qu'avec l'aide d'autres logiciels
Re: recadrer l'image et la stocker dans une nouvelle colonnerun program(executable("I:\00\FastStoneIV\magick.exe"),options({目||" -fill none -fuzz 0% -draw \!"color 92,30 floodfill\!" "||标}));
