web-dev-qa-db-ja.com

バッチ画像の自動トリミング、固定幅の適用、アスペクト比の維持

私がやろうとしていることの解決策を見つけるのは難しいと感じています。

簡単に言えば、これらの画像の使用法はオンラインストア用です。

Autioクロップボーダーを使用したIrfanViewバッチ処理は、基本的にクロップを分類します。処理中の画像に白/黒または均一な境界線が存在するものを切り取る必要があります。

しかし、私は画像を完全な正方形に保つ必要があります。 300x300ピクセルのように。

したがって、たとえば、トリミングされる画像のフォーカスが長い場合、上下に達するまで空白/余白がトリミングされます。次に、左右のサイズが長さに等しくなるポイントまで左右をトリミングするだけです。空白(マージン)の一部のみを削除するか、必要に応じて空白(マージン)を追加します。

3
StuyvesantBlue

imagemagickには素晴らしいオプション-trimがあります。約1年前に-sizeと一緒に4500枚の写真を使用して、空のモノクロの境界線を削除し、製品だけを残したことを覚えています。すべての画像をディレクトリaに置き、空のディレクトリbを作成したことを覚えています。次に、dir aから次のようなものを使用します

for i in *; do convert-im6.q16 $i -trim -resize 300 ../b/$i; done

次に、約1時間待って、dir bに4500枚の画像があり、モノクロの背景がトリミングされ、幅が300ピクセルになりました。 convert-im6.q16コマンドは、convertなど、他のシステムでは少し異なる名前が付けられている場合があります。

3
gmelis

元の画像に実際の黒または白の境界線がなく、そのような境界線の作成を避けたい場合は、Imagemagickのconvertを使用できます。

convert in.jpg -geometry 300x300^ -gravity center -crop 300x300+0+0 out.jpg

キャレット(^)は、画像が幅と高さの両方を埋めるようにします。

ただし、-geometryパラメータを使用するだけでは、正方形のソースマテリアルがないと仮定すると、一方の辺が大きすぎる画像が残ります。したがって、最終的な画像解像度を得るには、中央付近をトリミングする必要があります。 +0+0は、カットオフパーツを必要としないため、個別のファイルとして取得しないようにします。

ソース画像に実際に境界線がある場合は、-trimの直後にin.jpgを使用してみてください。

1
qubodup

IrfanViewを使用して、実行可能なソリューションを実現しました。

ファイルからのバッチ変換/名前変更の使用>> [入力ファイル]ダイアログに画像を追加するだけです。

  1. バッチ変換設定の詳細オプションを使用して、[詳細]をクリックします。

  2. [サイズ変更]にチェックマークを付け、[新しいサイズを設定]、[1つ設定]を選択しますOR両方のサイドに。高さ/幅に同じサイズを入力します(300pxを使用します)。そのサイズのポイント。したがって、最大サイズ(画像が縦向きか横向きかによって異なります)になり、300ピクセルになります。また、アスペクト比を維持している場合は、反対側も比例して拡大縮小されます。

  3. また、スマートクロップも実行します。IrfanViewの場合は自動クロップボーダーと呼ばれます。この設定は[サイズ変更]ダイアログの右側に表示されます。

それを完了する前に、最初にトリミングを行い、次にサイズ変更を行うことを確認する必要があります。そうしないと、最初に300pxにサイズ変更してからトリミングするため、300pxよりも小さいものになってしまいます...あなたは結果を想像することができます。

  1. したがって、右下隅にある[カスタム処理順序]にチェックマークを付け、[順序の変更]をクリックします。自動トリミングの境界線を上に移動します。 [OK]をクリックし、もう一度[OK]をクリックすると、変換する準備が整います。 Clik StartBatch。

これは私の正確な質問を正確に解決しませんでしたが、最大の側面を300pxにし、サイズ変更前にスマートなトリミングを行うことができれば問題ありません。私がHTMLのCSSで達成できる残りの部分は、実際にはより良い解決策かもしれません。

1
StuyvesantBlue

透明なピクセルをトリミングしたいという点で要件が少し異なりましたが、機能的には境界線を削除するのと同じかもしれませんか?

これらの答えはどれも私にはうまくいきませんでした。バウンティを置いた後、私は検索を続け、extentが欠けている部分であることがわかりました。

magick convert *.png -trim -background none -resize 300x300 -gravity center -extent 300x300 out/processed.png

私が理解している限り、各パラメーターの機能の内訳は次のとおりです。

  • -trim:すべての透明ピクセル(左、右、上、下)をトリミングします
  • -background none:サイズ変更の透明性を維持します(順序は重要です!)
  • -resize 300x300:最大幅と高さを300にします。正方形にしません
  • -gravity center:画像を中央揃えにします(必要ない場合があり、サイズ変更と範囲の両方で機能する場合があり、あまりテストしませんでした)。
  • -extent 300x300canvasのサイズを変更します。これにより、再び正方形になります。

これは基本的に3つのステップに相当します。

  1. 透明なエッジを削除します
  2. 幅/高さが300ピクセルを超えないようにサイズを変更します。
  3. 幅と高さの両方を300ピクセルにします。
0