如何使用ImageMagick转换工具修剪png,并使所有东西与原始中心保持相同的距离?

如何使用ImageMagick转换工具修剪png,并使所有东西与原始中心保持相同的距离?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我有一个板上有一些透明度的png,我想修剪透明度,并保持每个东西与原始中心的距离相同。 我使用ImageMagick中的转换工具 比如说, 原来的那个 我想要的结果 我与convert original.png-trim+repage out.png一起使用的结果 原始文件在这里 我建议运行-trim操作,并在临时变量中记录页面偏移量。然后应用-extent计算最终图像 例如 #捕获原始大小。 read-r WIDTH HEIGHT我可以通过在Windows10的UbuntuBash sh

我有一个板上有一些透明度的png,我想修剪透明度,并保持每个东西与原始中心的距离相同。 我使用ImageMagick中的转换工具 比如说,

原来的那个

我想要的结果

我与
convert original.png-trim+repage out.png一起使用的结果

原始文件在这里


我建议运行
-trim
操作,并在临时变量中记录页面偏移量。然后应用
-extent
计算最终图像

例如

#捕获原始大小。

read-r WIDTH HEIGHT我可以通过在Windows10的UbuntuBash shell中使用IM6.8.9-9,运行以下命令来获得您描述的结果

convert test.png -write mpr:input -duplicate 3 \
   -distort SRT %[fx:t*90] -background none -layers merge -trim \
   -set option:pagewide %[w] -set option:pagehigh %[h] -set option:pageoffset %[fx:page.x] \
   -delete 0 mpr:input -set page %[pagewide]x%[pagehigh]-%[pageoffset]-%[pageoffset] \
   -coalesce result.png
它读取输入,将一个副本存储在临时内存中,再复制3个副本,并将它们旋转0、90、180和270度。然后将其展平,并使用修剪结果计算最终图像尺寸和偏移。接下来,它删除修改后的图像,从临时内存中恢复原始图像,并通过将这些计算出的页面设置应用于原始图像来创建输出

这应该适用于方形图像。如果宽度和高度尺寸不相同,计算将变得更加复杂

编辑为添加:我在下面添加的命令应该获取任何输入图像并尽可能地修剪透明,同时将原始中心像素保持在结果的中心

convert test.png -write mpr:input -background none \
   -rotate 180 mpr:input -composite -set page %[@] \
   -set option:bounds %[fx:page.width]x%[fx:page.height]-%[fx:page.x]-%[fx:page.y] \
   -delete 0 mpr:input -set page %[bounds] -coalesce result.png

它从顶部和底部修剪的数量相同,从左侧和右侧修剪的数量相同,但顶部/底部的数量可能与左侧/右侧的数量不同。

感谢所有的家伙。你所有的命令都有效,因为我的一些图片不是正方形的,所以我最终使用这个命令从imagemagick论坛学习,它在Windows7和IM V7.0.7-31中有效

magick lBW9I.png ( +clone -trim -set option:NTRIM %[fx:min(min(page.x,page.width-w-page.x),min(page.y,page.height-h-page.y)*page.width/page.height)]x%[fx:min(min(page.y,page.height-h-page.y),min(page.x,page.width-w-page.x)*page.height/page.width)] +delete ) -shave %[NTRIM] x.png

所以你想把顶部和底部修剪成彼此相同的量?你想把左右两边修剪得一样吗?但是,你可能会从侧面减去与从顶部和底部减去的量不同的量?还是我完全错了?你使用的是什么操作系统?是的,我想从左侧和右侧修剪相同的数量,从顶部和底部修剪相同的数量,并且保持相同的比例(宽度/高度)。