裁剪图像并存储到新列中我想裁剪图像并将裁剪后的图像存储在新列中。
我的第一个方法是:
for each row (:new col = :old col << crop(...))
...但后来我在社区里发现了@Craige_Hales 的帖子,
https://community.jmp.com/t5/Discussions/Crop-a-JPG-Image/mp/442473/highlight/true#M69072
重要信息:

因此,我尝试了这个:
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 ) ));
...没有效果。
在脚本索引中,我发现:

也许使用图片作为临时变量?
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)
确实如此:

但是点击数据表后,我注意到输入列也发生了变化:

所以,我的最终脚本是:
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)
- 使用新图像()创建新图像
- 调整此图像的大小
- 将其存储在新列中
自动化和脚本回复:裁剪图像并存储到新列中不幸的是,在我的实际数据集中,只有部分图像被裁剪了。
简单的解释:我通过从 Powerpoint 演示文稿中复制/粘贴来填充图像列。
所有图像的长宽比相同,因此它们在 JMP 数据网格中的大小相同——但它们的实际大小却不一样!只有当参数中的像素值小于图像的实际大小时,裁剪才会起作用。
当您使用具有不同纵横比的图像时(尝试为社区帖子创建演示案例),更容易检测。

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)
所以,我的最终脚本是:
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;)
);
尝试?-> 以防万一其中一张图片丢失。
回复:裁剪图像并存储到新列中这并不难。
我认为困难的部分是:将一张图片的背景变成透明,并将其叠加到其他图片上。
JSL没有使图片背景透明的功能。
只能借助其他软件才能实现
回复:裁剪图像并存储到新列中run program(executable("I:\00\FastStoneIV\magick.exe"),options({目||" -fill none -fuzz 0% -draw \!"color 92,30 floodfill\!" "||标}));
