Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ImageMagick中均匀修剪/裁剪图像?_Image_Image Processing_Imagemagick - Fatal编程技术网

如何在ImageMagick中均匀修剪/裁剪图像?

如何在ImageMagick中均匀修剪/裁剪图像?,image,image-processing,imagemagick,Image,Image Processing,Imagemagick,假设我有一个原始图像(灰色背景),在右边有一个黑色圆圈(不居中),从圆圈的任何边缘到边缘的最小空间是75px。我想修剪所有边上相同数量的空间,并且空间应该是在不裁剪图像中实际对象的情况下可能的最大空间(图像中以洋红色表示的区域)。我很想知道如何解决这个问题 提前谢谢 如果我正确理解了这个问题,您希望修剪的图像不是基于外部边界矩形,而是基于外部边界矩形 convert base.png -canny 1x1 -trim mbr.png sX=$(identify -format '%W-(0

假设我有一个原始图像(灰色背景),在右边有一个黑色圆圈(不居中),从圆圈的任何边缘到边缘的最小空间是75px。我想修剪所有边上相同数量的空间,并且空间应该是在不裁剪图像中实际对象的情况下可能的最大空间(图像中以洋红色表示的区域)。我很想知道如何解决这个问题


提前谢谢

如果我正确理解了这个问题,您希望修剪的图像不是基于外部边界矩形,而是基于外部边界矩形

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
-我想没有它也一样。