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
1- imagemagick (またはその他のソリューション) を使用して、これらの区切り線に基づいて画像を分割するにはどうすればよいですか? (すべての画像が 2550x3507 なので、これらの線の x と y を取得できます)
- 分割後または分割中に、上記の希望の順序に基づいて自動的に番号を付けることは可能ですか?
答え1
[ImageMagick] を使用してこれらの区切り線に基づいて画像を分割するにはどうすればよいですか?
おそらく最も簡単な解決策は、-作物そのようです:
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%02d.jpg
このコマンド:
各画像を6つの(おおよそ)同じサイズのタイルに分割します(-クロップ 3x2@)、それぞれに順番に番号を付けます。
番号付けのシーケンスは
1
(から始まります-シーン1)、 それよりも0
。最後の数字の一桁目に
0
パディング( )を付けます [ ]。%02d
01-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
for
Batch には、コマンド ラインから引数を取得して計算を行う機能があり、ループやステートメントなども備えている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 natsort
0
from natsort import natsorted
item_list = list(natsorted(item_list))
natsort
明確に言うと、「コメント解除」とは、#
行の先頭のスペースを削除することを意味します。使用方法に関する追加の指示はスクリプトに含まれています。