jpg 형식으로 스캔한 이미지가 많이 있습니다. 아래 사진에서 볼 수 있듯이 카드는 양면입니다. 스캔할 때 스캐너 내부에 6개의 카드를 넣었습니다.
아래 그림에서 첫 번째 카드의 앞면은 1번, 뒷면은 7번입니다. 두 번째 카드의 앞면은 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%
이로 인해 잠재적으로 "잘라내기" 이미지도 생성될 수 있습니다(바람직하지 않을 수 있음).예를 사용하면 일반적으로 " 트리밍" 이미지 생성을 방지하기 위해
-3x2@
"오버슈팅" 백분율(예: )보다 크기가 더 가까운(서로 상대적으로) 이미지가 생성됩니다 .33.4%x50%
배치 파일에서 의도한 대로 작동하려면 백분율 기호를 두 배로 늘려야 합니다.
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
Batch에는 명령줄에서 인수를 가져와 수학을 수행할 수 있을 뿐만 아니라 for
루프와 if
명령문 등을 포함할 수 있으므로 이 솔루션을 (분명히) 개선할 수 있습니다.
메모 이름 바꾸기
위 이름 바꾸기 프로세스의 후반부를 살펴보면 파일 이름에 패턴이 있음을 알 수 있습니다. 효과적으로 특정 위치 N에 대해 다음 두 공식 중 하나를 사용하여 구성표에서 항목의 새 위치를 찾을 수 있습니다.
- "중간" 지점까지의 항목(예: 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.jpg대이미지_01.jpg)은 Windows에서 직접 반환할 때 (자연스러운) 순서로 표시되지 않습니다. 즉, 다음과 같이 반환됩니다.cropped_1.jpg, cropped_10.jpg, cropped_11.jpg, cropped_12.jpg, cropped_2.jpg, etc.
파일 이름의 특정 단어 및 문구(예:
- Copy
)도 파일 이름이 반환되는 순서에 영향을 줄 수 있습니다.
위의 공식을 사용하는 경우 0
파일 이름에 한 자리 숫자를 -pad하고 같은 항목을 제거하십시오 - 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 3.x(3.6.4로 테스트됨)의 경우 명령줄에서 순서대로 임의 파일의 이름을 바꾸는 데 사용할 수 있습니다(예:자른_01.jpg...잘린_XX.jpg) 귀하의 질문에 명시된 순서대로. 당신은해야합니다파이썬 사본을 가지고 있다시험해 보기로 결정했다면 설치하세요.
제한 사항
정보를 얻기 위해 텍스트 파일을 읽지 않습니다(따라서 현재 파일 목록을 지정하지 않음). 마찬가지로 명령줄에는 이미지/파일 이름 접두사와 확장자가 필요합니다.
있는 그대로 스크립트는 파일 이름이 자동으로 올바른 순서로 반환될 것으로 예상합니다(
0
위의 Windows 및 -padding 참조).항목이 패딩되지 않은 경우
natsort
(예: 로 설치됨 ) 이라는 타사 모듈을 사용하는 옵션이 있습니다 . 하지만 이 옵션을 사용하려면 설치 후 스크립트에서 13행( )과 105행( ) 의 주석 처리를 제거해야 합니다 .python -m pip install natsort
0
from natsort import natsorted
item_list = list(natsorted(item_list))
natsort
명확하게 말하면 "주석 해제"는 #
줄 시작 부분의 선행 공백을 제거하는 것을 의미합니다. 사용법에 대한 추가 지침이 스크립트에 포함되어 있습니다.