如何在ImageMagick中均匀修剪/裁剪图像?
假设我有一个原始图像(灰色背景),在右边有一个黑色圆圈(不居中),从圆圈的任何边缘到边缘的最小空间是75px。我想修剪所有边上相同数量的空间,并且空间应该是在不裁剪图像中实际对象的情况下可能的最大空间(图像中以洋红色表示的区域)。我很想知道如何解决这个问题如何在ImageMagick中均匀修剪/裁剪图像?,image,image-processing,imagemagick,Image,Image Processing,Imagemagick,假设我有一个原始图像(灰色背景),在右边有一个黑色圆圈(不居中),从圆圈的任何边缘到边缘的最小空间是75px。我想修剪所有边上相同数量的空间,并且空间应该是在不裁剪图像中实际对象的情况下可能的最大空间(图像中以洋红色表示的区域)。我很想知道如何解决这个问题 提前谢谢 如果我正确理解了这个问题,您希望修剪的图像不是基于外部边界矩形,而是基于外部边界矩形 convert base.png -canny 1x1 -trim mbr.png sX=$(identify -format '%W-(0
提前谢谢 如果我正确理解了这个问题,您希望修剪的图像不是基于外部边界矩形,而是基于外部边界矩形
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
我会做这样的事
给定我创建的一个图像
convert -size 200x200 xc:gray75 -fill black -draw 'circle 125 125 150 125' base.png
我会把图像放在一个二值化的边缘&把所有的东西都修剪成最小的边框
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
这将生成包含原始页面信息的mbr.png
图像。可以使用identify
实用程序提取页面信息,以计算外部边界矩形
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
最后使用-shave
将计算结果应用到原始图像上
convert base.png -shave "${sX}x${sY}" out.png
如果我正确理解了这个问题,您希望修剪的图像不是基于外部边界矩形,而是基于外部边界矩形
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
我会做这样的事
给定我创建的一个图像
convert -size 200x200 xc:gray75 -fill black -draw 'circle 125 125 150 125' base.png
我会把图像放在一个二值化的边缘&把所有的东西都修剪成最小的边框
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
这将生成包含原始页面信息的mbr.png
图像。可以使用identify
实用程序提取页面信息,以计算外部边界矩形
convert base.png -canny 1x1 -trim mbr.png
sX=$(identify -format '%W-(0 %X)-%w\n' mbr.png | bc)
sY=$(identify -format '%H-(0 %Y)-%h\n' mbr.png | bc)
最后使用-shave
将计算结果应用到原始图像上
convert base.png -shave "${sX}x${sY}" out.png
我假设您希望修剪图像(或用ImageMagick术语刮胡子)到边缘的最小水平或垂直距离。如果是这样的话,这可以用一个衬垫来完成:
convert circle.png -trim -set page "%[fx:page.width-min(page.width-page.x-w,page.height-page.y-h)*2]x%[fx:page.height-min(page.width-page.x-w,page.height-page.y-h)*2]+%[fx:page.x-min(page.width-page.x-w,page.height-page.y-h)]+%[fx:page.y-min(page.width-page.x-w,page.height-page.y-h)]" -background none -flatten output.png
这看起来可能很复杂,但实际上并非如此。首先修剪图像。结果仍然会存储页面几何体的信息,包括原始宽度、高度和实际偏移量。有了这些信息,我可以使用设置页面几何图形(正确的宽度和高度以及新的偏移)。最后,展平图像将产生所需的输出。我假设您希望将图像修剪(或用ImageMagick术语)到边缘的最小水平或垂直距离。如果是这样的话,这可以用一个衬垫来完成:
convert circle.png -trim -set page "%[fx:page.width-min(page.width-page.x-w,page.height-page.y-h)*2]x%[fx:page.height-min(page.width-page.x-w,page.height-page.y-h)*2]+%[fx:page.x-min(page.width-page.x-w,page.height-page.y-h)]+%[fx:page.y-min(page.width-page.x-w,page.height-page.y-h)]" -background none -flatten output.png
这看起来可能很复杂,但实际上并非如此。首先修剪图像。结果仍然会存储页面几何体的信息,包括原始宽度、高度和实际偏移量。有了这些信息,我可以使用设置页面几何图形(正确的宽度和高度以及新的偏移)。最后,展平图像将产生所需的输出。干得好!你需要
-canny 1x1
-我想没有修剪也一样。干得好!你需要-canny 1x1
-我想没有它也一样。