指定された比率で jpg 画像を分割する (imagemagick)

指定された比率で jpg 画像を分割する (imagemagick)

jpg 形式でスキャンした画像がたくさんあります。下の写真でわかるように、カードは両面で、スキャンするときにスキャナーの中に 6 枚のカードを入れました。

下の写真では、最初のカードの表面には番号 1 が付けられ、裏面には番号 7 が付けられています。2 番目のカードの表面には番号 2 が付けられ、裏面には番号 8 が付けられ、というように続きます。

達成したいこと: これらのファイル (image1.jpg と image2.jpg) を分割して、次のような順序で個々のカードを含むフォルダーを作成します。

1.jpg(1)
2.jpg(7) (since 7 is the back side of the 1.jpg) 

3.jpg(2)
4.jpg(8)
etc

(image1.jpg) 6枚のカードの表面: カードの表面

(image2.jpg) 6枚のカード裏面: カードの裏面

1- imagemagick (またはその他のソリューション) を使用して、これらの区切り線に基づいて画像を分割するにはどうすればよいですか? (すべての画像が 2550x3507 なので、これらの線の x と y を取得できます)

区切り線は赤です: 区切り線は赤です

  1. 分割後または分割中に、上記の希望の順序に基づいて自動的に番号を付けることは可能ですか?

答え1

[ImageMagick] を使用してこれらの区切り線に基づいて画像を分割するにはどうすればよいですか?

おそらく最も簡単な解決策は、-作物そのようです:

convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%02d.jpg

このコマンド:

  • 各画像を6つの(おおよそ)同じサイズのタイルに分割します(-クロップ 3x2@)、それぞれに順番に番号を付けます。

  • 番号付けのシーケンスは1(から始まります-シーン1)、 それよりも0

  • 最後の数字の一桁目に0パディング( )を付けます [ ]。%02d01-09

コマンドノート

  • タイルの切り抜きに正確なサイズ (例1000x1000) を指定したり、パーセンテージ (例33%x50%) を使用したりすることも可能ですが、これにより「トリミング」画像も生成される可能性があります (望ましくない結果になる可能性があります)。

  • eg を使用すると-3x2@、通常、「オーバーシュート」パーセンテージ (eg ) よりもサイズが近い (互いに相対的に) 画像が作成され、33.4%x50%「トリミング」画像の生成が回避されます。

  • バッチ ファイルでは、意図したとおりに動作させるにはパーセント記号を 2 倍にする必要があります。

    convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%%02d.jpg
    
  • 画像/キャンバスオフセットを持つフォーマット(例)に書き込む場合は.png、以下を含めるとよいでしょう。+ページ変更あなたの後-crop

    convert -crop 3x2@ +repage -scene 1 image1.jpg image2.jpg cropped_%02d.png
    
  • 入力形式に画像/キャンバスのオフセットを含めることができる場合は、+repageそれらも含めることをお勧めします。


名前の変更

上記の順序に基づいて自動的に番号を付ける事は可能ですか?

ImageMagick だけでは、これを行うことができませんでした (おそらく不可能だと思いますが、正直なところ確信はありません)。もちろん、ImageMagick とは別に、これは完全に可能です。

この質問に というタグを付けたのでbatch、おそらく一括して良い解決策を提案することはできないということを申し上げておきます。その点を考慮すると、あなた (または他の誰か) が、私が以下に詳述するものよりも良いものを思いつく可能性が非常に高いと思われます。

必須バッチ(非)回答

バッチを使用すると、ブルートフォースによる名前変更が可能です。まず、最初と最後のファイルを除くすべてのファイルの名前を一時的に変更します。例:

rename cropped_02.jpg  cropped_02_temp.jpg 
[...]
rename cropped_11.jpg  cropped_11_temp.jpg 

次に、名前を新しい位置に戻します。例:

rename cropped_02_temp.jpg  cropped_03.jpg
rename cropped_03_temp.jpg  cropped_05.jpg 
rename cropped_04_temp.jpg  cropped_07.jpg 
rename cropped_05_temp.jpg  cropped_09.jpg 
rename cropped_06_temp.jpg  cropped_11.jpg 
rename cropped_07_temp.jpg  cropped_02.jpg 
rename cropped_08_temp.jpg  cropped_04.jpg 
rename cropped_09_temp.jpg  cropped_06.jpg 
rename cropped_10_temp.jpg  cropped_08.jpg 
rename cropped_11_temp.jpg  cropped_10.jpg 

forBatch には、コマンド ラインから引数を取得して計算を行う機能があり、ループやステートメントなども備えているifため、このソリューションは (当然ながら) 改善することができます。


ノートの名前を変更する

上記の名前変更プロセスの後半を見ると、ファイル名にパターンがあることに気付くでしょう。実際には、特定の位置 N に対して、次の 2 つの式のいずれかを使用して、スキーム内のアイテムの新しい位置を見つけることができます。

  • 「中間」点までの項目(例:2-6): (Position_N * 2) - 1
  • 「中間」ポイントを超えるアイテム (例: 7-11): (Position_N * 2) - Total_Items

注: これらの数式をシーケンス全体 (例: 1 と 12) に適用することは可能ですが、最初の項目と最後の項目の位置は変わりません。そのため、名前を変更する必要はないと言えます。


さらに、これらはどんな(奇数ではない)アイテム/位置の数(4以上)、ファイル名が順番に並んでいると仮定します(例:1から12)。つまり、元の例では次のようになります。

Temp Item 2 becomes (2 * 2) - 1  = Item 3
Temp Item 7 becomes (7 * 2) - 12 = Item 2
Temp Item 8 becomes (8 * 2) - 12 = Item 4
[...]

したがって、ここで示した数式は、バッチ (またはその他のスクリプト) ソリューションの基礎になる可能性があります。ただし、そのように使用する場合は、他に注意すべき点がいくつかあります...

ソート

並べ替え (上で述べたように) は、スクリプトなどで実際的な結果をもたらす可能性があります。Windows によって「順序どおりに」返された項目は、指定された数式を「壊す」ためです。特に、次のようになります。

  • Windowsは名前を並べ替えます辞書式0デフォルトで順序付けされます。つまり、 1桁の数字の前にa が付いていない項目(例:画像1画像01) は、Windows から直接返される場合、(自然な) 順序で表示されません。つまり、次のように返されます。

    cropped_1.jpg, cropped_10.jpg, cropped_11.jpg, cropped_12.jpg, cropped_2.jpg, etc.
    
  • ファイル名内の特定の単語やフレーズ (など- Copy) も、ファイル名が返される順序に影響を与える可能性があります。

上記の数式を使用する場合は、0ファイル名に 1 桁の数字を追加し、次のようなものを削除してください- Copy(または、これらの問題を軽減するための手順を実行してください)。

0 から始まるループ/カウンター

カウントを開始する言語0(たとえば、ループ内)を使用している場合は、数式が若干変更される可能性があります。

  • 「中間」点までの項目(例:1-5): (Position_N * 2)
  • 「中間」ポイントを超える項目 (例: 6-10): (Position_N * 2) - (Total_Items - 1)

0 から数えると、12 個の項目が実行されることに注意してください0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


Python スクリプト

もし興味があれば、私が書いた短い(おそらくひどい)PythonスクリプトPython 3.x(3.6.4でテスト済み)では、コマンドラインから任意のファイル名を変更できます(例:切り取られた_01.jpg...切り取られた_XX.jpg)を質問で指定された順序にしてください。Pythonのコピーを持っている試してみることにした場合はインストールしてください。

制限事項

  • テキスト ファイルから情報を読み取りません (したがって、現時点ではファイルのリストを指定しません)。同様に、コマンド ラインではイメージ/ファイル名のプレフィックスと拡張子が必要です。

  • 現状では、スクリプトはファイル名が自動的に正しい順序で返されることを想定しています (0上記の Windows と -padding を参照)。

  • アイテムが -padded でない場合、natsort( などを使用してインストールされる)というサードパーティ モジュールを使用するオプションがあります。ただし、このオプションを使用するには、インストール後にスクリプトの13 行目 ( ) と 105 行目 ( )のコメントを解除する必要があります。python -m pip install natsort0from natsort import natsorteditem_list = list(natsorted(item_list))natsort

明確に言うと、「コメント解除」とは、#行の先頭のスペースを削除することを意味します。使用方法に関する追加の指示はスクリプトに含まれています。

関連情報