아래 사진이 하나 있습니다. 2579*2388픽셀입니다. 왼쪽 하단 모서리가 0,0이라고 가정해 보겠습니다. 이 이미지에서 아래와 같이 여러 이미지를 생성하여 작업 폴더에 저장하고 싶습니다. 각 이미지의 크기는 100*100픽셀입니다.각 이미지는 왼쪽 하단 좌표에 따라 저장됩니다.
- 첫 번째 이미지의 왼쪽 하단 모서리는 0,0에 있습니다. 오른쪽 상단 모서리는 100,100이고 이미지는 0-0.jpg로 저장됩니다.
- 두 번째 이미지의 왼쪽 하단 모서리는 10,0에 있습니다. 오른쪽 상단이 110,100이고 이미지는 10-0.jpg로 저장됩니다.
- 맨 아래 행이 완성되면 Y 좌표가 10만큼 이동합니다. 두 번째 행의 경우 첫 번째 이미지는 0,10에 있고 이미지는 0-10.jpg로 저장됩니다.
가장 빠른 방법은 무엇입니까? 나는 명령줄 접근 방식을 선호합니다. 하지만 먼저 어떤 종류의 도구라도 사용할 수 있습니다.
제가 아는 한 현재 이미지의 경우 약 257*238 이미지로 분할됩니다. 하지만 디스크 공간이 충분하고 텍스트 감지를 수행하려면 각 이미지가 필요합니다.
답변1
원하는 작업을 수행하는 셸 코드( 또는 )는 다음과 bash
같습니다 ksh
.zsh
image=clock.jpg
size=$( identify -ping -format "%wx%h" "${image}" )
x_upb=${size%x*}
y_upb=${size#*x}
x_inc=10
y_inc=10
x_tile=100
y_tile=100
for ((x=0; x<x_upb; x+=x_inc))
do
for ((y=0; y<y_upb; y+=y_inc))
do
convert "${image}" -crop "${x_tile}x${y_tile}+${x}+${y}" "$x-$y.jpg"
done
done
이 프로그램은 convert
ImageMagick 프로그램 제품군에서 제공됩니다. 이미지 파일에서 이미지 크기를 자동으로 추출하는 것도 가능하므로 해당 단계도 추가했습니다. don_crissti의 의견을 바탕으로 이 목적으로도 ImageMagick을 사용하는 것이 좋습니다 identify
(또한 ImageMagick 프로그램 제품군에서 편리하게 제공됩니다). 물론 x_upb
이미지 크기를 하드코딩 y_upb
하고 필요에 따라 타일 크기와 타일 이동 델타를 조정할 수도 있습니다. 나는 코드가 설명이 필요하다고 생각합니다.
참고: 약간의 조정이 필요합니다. 예를 들어 타일은 캡을 초과하지 않을 수 있습니다(또는 테두리에 가까울 경우 하위 사진이 더 작아짐). 따라서 동일하게 하려면 캡에서 타일 크기를 빼야 합니다. 하위 이미지 크기 전체 이미지 위에.
참고: 내가 아는 한 "기하학"은 왼쪽 위 모서리의 (0,0)에서 시작하는 방향을 갖는 것으로 정의됩니다. 다른 방향을 원하는 경우 해당 인터페이스 정의에 맞게 수학을 직접 수행해야 합니다. 일반적인 코드 패턴은 상한에 따라 해당 좌표를 지정하는 것입니다. 예를 들어 변형 부분, 즉 (루프) 변수가 됩니다 $((y_upb - y))
.y