Recortar la imagen y guardarla en una nueva columnaQuería recortar imágenes y almacenar las imágenes recortadas en una nueva columna.
Mi primer acercamiento fue:
for each row (:new col = :old col << crop(...))
... pero luego encontré la publicación de @Craige_Hales en la comunidad,
https://community.jmp.com/t5/Discussions/Crop-a-JPG-Image/mp/442473/highlight/true#M69072
con la información importante:

Entonces, probé esto:
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 ) ));
... sin efecto.
En el índice de scripts encontré:

¿Quizás usar imagen como una variable temporal?
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)
y de hecho:

Pero después de hacer clic en la tabla de datos, noté que la columna de entrada también había cambiado:

Así que mi guión final fue:
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)
- Utilice nueva imagen() para crear una nueva imagen
- cambiar el tamaño de esta imagen
- guárdelo en la nueva columna
Automatización y scriptingRe: recortar imagen y guardarla en una nueva columnaDesafortunadamente, con mi conjunto de datos real, solo se recortaron algunas de las imágenes.
La explicación fácil: llené la columna de imágenes copiando y pegando desde una presentación de Powerpoint.
Todas las imágenes tenían la misma relación de aspecto, por lo que tenían el mismo tamaño en la cuadrícula de datos JMP, ¡pero no el mismo tamaño real! El recorte solo funciona si los valores de píxeles en los argumentos son menores que el tamaño real de la imagen.
Es mucho más fácil de detectar cuando se utilizan imágenes con diferentes relaciones de aspecto (intentando crear un caso de demostración para una publicación de la comunidad).

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)
Así que mi guión final fue:
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;)
);
¿Probar? -> por si acaso falta alguna de las imágenes.
Re: recortar imagen y guardarla en una nueva columnaEsto no es difícil
Creo que la parte difícil es: hacer transparente el fondo de una imagen y superponerlo a otras imágenes.
JSL no tiene la función de hacer transparente el fondo de las imágenes.
Sólo se puede lograr con la ayuda de otro software.
Re: recortar imagen y guardarla en una nueva columnarun program(executable("I:\00\FastStoneIV\magick.exe"),options({目||" -fill none -fuzz 0% -draw \!"color 92,30 floodfill\!" "||标}));
