如何使用fu脚本圈选和裁剪?

时间:2017-11-04 15:01:22

标签: bash image imagemagick gimp

我正在努力加快使用fu脚本裁剪一堆图像的过程。所有图像都会被完全裁剪。我需要选择一个以图像为中心的圆,然后将图像裁剪到该圆。我希望圆圈周围的额外区域(圆圈和正方形之间的差异)是透明的。我也更喜欢将它的大小裁剪成所选的图像。

我的问题的后半部分是我能从命令行运行这样的操作吗?理想情况下,我希望在图像目录上运行此过程并立即裁剪它们。

(我不熟悉脚本编写,并不完全确定这一切是如何工作的。如果有人采用不同的方法来解决相同的重复问题,我也会很感激。)

4 个答案:

答案 0 :(得分:1)

如果我从以下开始,我认为这很接近:

enter image description here

#!/bin/bash
# Get x,y coordinates of centre
cx=$(convert bean.jpg -format "%[fx:int(w/2)]" info:)
cy=$(convert bean.jpg -format "%[fx:int(h/2)]" info:)
# Find point on circle circumeference
pt="0,$cy"
[ $cx -gt $cy ] && pt="$cx,0"

# Now create a black and white circle of the right size as transparency
convert bean.jpg                                                                               \
     \( +clone -fill black -colorize 100% -fill white -draw "circle $cx,$cy $pt" -alpha off \) \
     -compose copyopacity -composite                                                           \
     -trim +repage result.png

enter image description here

如果您拥有 ImageMagick v7,并且喜欢看疯狂的事物,那么您可以在一行中完成所有这些工作:

magick bean.jpg \
     \( +clone -fill black -colorize 100% -fill white -draw "circle %[fx:int(w/2)],%[fx:int(h/2)] %[fx:w>h?int(w/2):0],%[fx:w>h?0:int(h/2)]" -alpha off \) \
     -compose copyopacity -composite \
     -trim +repage result.png

答案 1 :(得分:0)

稍微修改Mark Setchell的漂亮代码,在ImageMagick 7中,你可以让它自动找到中心,转换到那里并在一个命令行中指定radius = 200,如下所示:

magick bean.jpg \
\( -clone 0 -fill black -colorize 100 -fill white \
-draw "translate %[fx:w/2],%[fx:h/2] circle 0,0 0,200" \) \
-alpha off -compose copy_opacity -composite result.png

在ImageMagick 6中,您需要另一个命令来获取中心:

declare `convert bean.jpg -format "CX=%[fx:w/2]\nCY=%[fx:h/2]\n" info:`

convert bean.jpg \
\( -clone 0 -fill black -colorize 100 -fill white \
-draw "translate $CX,$CY circle 0,0 0,200" \) \
-alpha off -compose copy_opacity -composite result.png

enter image description here

答案 2 :(得分:0)

像这样的ImageMagick命令应该将任何图像作为输入,然后从中心输出可能的最大圆。圆圈将在方形画布中。圆圈外的背景将是透明的。这适用于任何IM版本6.7.7或更高版本。

convert input.png -gravity center -background black -bordercolor black \
   \( -clone 0 -fill lime -colorize 100 -rotate 90 \) +swap -composite -trim \
   \( -clone 0 -fill white -colorize 100 -crop 2x+0+0 -shave 0x2 -border 0x1 \
   +repage -distort arc 360 \) -compose copyopacity -composite output.png

编辑添加:要从图像中心裁剪出特定大小的圆圈,只需用" -extent NxN \"替换整个第二行,其中N是所需裁剪的大小。

答案 3 :(得分:0)

在ImageMagick 7中,您可以将裁剪对中直径等于最小宽度或高度的圆,如下所示:

magick bean.jpg \
\( -clone 0 -fill black -colorize 100 -fill white \
-draw "translate %[fx:w/2],%[fx:h/2] circle 0,0 0,%[fx:min(w/2,h/2)]" \) \
-alpha off -compose copy_opacity -composite -trim result.png

enter image description here

在IM 6中,您可以通过以下方式完成:

declare `convert bean.jpg -format "CX=%[fx:w/2]\nCY=%[fx:h/2]\nRAD=%[fx:min(w/2,h/2)]\n" info:`

convert bean.jpg \
\( -clone 0 -fill black -colorize 100 -fill white \
-draw "translate $CX,$CY circle 0,0 0,$RAD" \) \
-alpha off -compose copy_opacity -composite -trim result3.png

enter image description here