2017-11-04 6 views
0

私は、fuスクリプトを使用してたくさんの画像を切り取る処理を迅速化しようとしています。すべての画像が同じように切り取られます。私は、画像の中心にある円を選択し、その円に画像を切り取る必要があります。私は、サークルの周りの余分な領域(円と広告の違い)が透明であることを望んでいます。私はまた、それが選択されたものだけに切り取られる画像を好むでしょう。fuスクリプトで選択して切り抜くにはどうすればいいですか?

私の質問の後半は、コマンドラインからこのような操作を実行できますか?私は理想的には、画像のディレクトリ上でこのプロセスを実行し、それらを一度にすべてトリミングしたいと考えています。

(私は誰もが、これは同じ繰り返しを解決するために、異なるアプローチを持っている場合は、私もあることを認めるであろう。fuのスクリプトに新しい、このすべてがどのように動作するか完全にわからない。)

+0

それはGimpの持つなんとかだが、そうではるかに簡単ImageMagick。それをあなたのタグに追加して、適切な人々の注意を引く。 – xenoid

+0

追加されました。方向をありがとう。 – wesleywmd

+0

あなたは何をしようとしているかを見ることができるように、サンプル画像を投稿できますか? Imagemagickでは、mogrifyコマンドを使用してイメージのフォルダ全体を処理できます。 – fmw42

答えて

1

私はこれがあると思います近くに、Iで始まる場合:

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 
+0

これはよく見えます。 1つの質問、どのように半径に指定することができますか? – wesleywmd

+0

小さな寸法に従って半径を自動的に選択します。半径を10にしたい場合は、現時点ではテストできませんが、 'pt =" $ cx、$((cy + 10)) "と設定します。 –

0

することができます、ImageMagickの7で、少しマークSetchellの素敵なコードを変更しますそれは、自動的にセンターを見つけることがに変換し、次のように1つのコマンドラインで= 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

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 

編集:画像の中心から特定のサイズの円をトリミングするには、単にNが希望クロップのサイズである「-extent N×Nの\」とその全体の第二ラインを置き換えます。次のように

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

関連する問題