2016-05-27 21 views
0

私は、黒い円を少し下にして(中央にはない)元のイメージ(灰色のバックゴールド)を持っていて、円の端から端までの最小スペースは75ピクセルと言います。私はすべての側で同じ量のスペースをトリミングしたいと思います。スペースは、イメージ内の実際のオブジェクト(イメージ内のマゼンタの領域)をトリミングせずに可能な最大スペースでなければなりません。これがどのように解決できるのか聞きたいです。事前にImageMagickで画像を一様にトリミング/トリミングするには?

Not centered object

ありがとう!私が正しく質問を理解していれば

答えて

2

は、あなたがminimum bounding rectangleに基づいていない画像をトリミングしたいのですが、境界矩形。

私はこのようなことをします。

私は画像を作成します。

convert -size 200x200 xc:gray75 -fill black -draw 'circle 125 125 150 125' base.png 

base image

私は、最小外接長方形まで、すべてをトリムバイナリエッジ&に画像をドロップします。

convert base.png -canny 1x1 -trim mbr.png 

find mbr

また、これは元のページの情報を持つことになりますmbr.png画像を生成します。ページの情報は、identifyユーティリティで抽出して、外接矩形を計算することができます。

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 

uniform crop

+1

素敵な仕事!あなたは '-canny 1x1'を必要としますか?それはまったく同じものではありません。 –

1

私はあなたがEdgeに最小限の水平または垂直距離で、あなたの画像をトリミング(またはImageMagickの用語で剃る)することを前提としています。ので、これは、この1つのライナーで行うことができる場合は、次の

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 FX expressionsを使用してページのジオメトリ(正しい幅&の高さと新しいオフセット)を設定できます。最後に、画像を平坦化することにより所望の出力が得られる。

関連する問題