ImageMagick - 타일 이미지에서 애니메이션 GIF 생성, "가상 캔버스" 메타데이터에 문제가 있음

ImageMagick - 타일 이미지에서 애니메이션 GIF 생성, "가상 캔버스" 메타데이터에 문제가 있음

다음과 유사한 작은 이미지가 포함된 이미지가 있습니다.

------
| 1  |
------
| 2  |
------
| 3  |
------
| 4  |
------

각 하위 이미지는 100x200이고 전체 이미지는 100x800입니다.

이미지 1부터 4까지 반복되는 단일 애니메이션으로 모두 결합하고 싶습니다.

저는 imagemagick의 convert도구를 사용하여 이미지를 자릅니다. 예를 들어 배치 파일을 만들었습니다.

convert %1 -crop 100x200+0+0 %~n1_01.png
convert %1 -crop 100x200+0+200 %~n1_02.png
convert %1 -crop 100x200+0+400 %~n1_03.png
convert %1 -crop 100x200+0+600 %~n1_04.png

그런 다음 다음과 같은 이미지에서 실행합니다.main.jpg

이렇게 하면 이미지 세트가 생성되지만 이를 gif로 변환하려고 하면 이렇게 됩니다.

convert *.png out.gif

100x200 크기의 단일 애니메이션 대신 100x800 크기의 애니메이션을 얻었고 이미지는 특정 오프셋에서 팝업됩니다.

identify자른 이미지 몇 장을 보면

main_01.png PNG 100x200 100x800+0+0 8-bit sRGB 4.74KB 0.000u 0:00.000
main_02.png PNG 100x200 100x800+0+200 8-bit sRGB 3.39KB 0.000u 0:00.000

아마도 imagemagick은 메타데이터를 읽고 실제로 100x800 캔버스를 사용하고 각 이미지를 특정 오프셋에 배치해야 한다고 결정함으로써 도움을 주려고 노력하고 있을 것입니다. 그것은 내가 원하는 것이 아닙니다.

실제로, 읽으면서지도 시간, imagemagick은 당신을 돕기 위해 거기에 그것을 남겨 둡니다.

즉, IM은 나중에 사용할 수 있도록 이미지의 '가상 캔버스', '페이지' 또는 '레이어링' 정보를 유지합니다. 이는 GIF 애니메이션 처리의 올바른 작업에 특히 중요합니다.

페인트에서 각 파일을 수동으로 연 다음 다시 저장하면 다시 식별할 때 다음과 같은 메시지 main_02.png가 나타납니다.

main_02.png PNG 100x200 100x200+0+0 8-bit sRGB 4.03KB 0.000u 0:00.000

모든 이미지에 대해 이 작업을 수행하여 다시 gif로 변환하고 마침내 내가 원하는 모양의 100x200 gif가 되었습니다.

페인트를 통해 수동으로 오프셋을 수행할 필요가 없도록 모든 오프셋을 (0, 0)으로 설정하려면 어떻게 해야 합니까?

답변1

+repage자르기 후에 다음을 수행하여 가상 캔버스 좌표를 재설정할 수 있습니다 .

convert %1 -crop 100x200+0+0 +repage %~n1_01.png
convert %1 -crop 100x200+0+200 +repage %~n1_02.png
convert %1 -crop 100x200+0+400 +repage %~n1_03.png
convert %1 -crop 100x200+0+600 +repage %~n1_04.png

또한 이미지를 타일로 분할하기 위해 배치 파일이 필요하지 않습니다. 크기만 지정하면 타일로 분할됩니다. 타일 번호의 출력 파일 이름에 "%d"를 사용하세요.

convert %1 -crop 100x200 +repage %~n1_%d.png

또는 두 자리 고정 너비 숫자를 사용하는 경우:

convert %1 -crop 100x200 +repage %~n1_%02d.png

그러면 4개의 이미지가 생성됩니다.

실제로 임시 중간 이미지 파일을 전혀 생성하지 않고도 동일한 명령으로 GIF 변환을 수행할 수도 있습니다. 다음 명령은 원하는 모든 작업을 한 번에 수행합니다.

convert %1 -crop 100x200 +repage out.gif

자세한 내용은 다음을 참조하세요.에 대한 문서-crop그리고 또한+repage( -repage모든 이미지의 가상 캔버스 데이터를 자체적으로 편집하는 데에도 사용할 수 있습니다).


그런데 이미지를 분할하는 또 다른 방법은숫자타일의 크기 대신 타일의 크기; 크기를 지정하면 됩니다.타일에서"@" 기호를 자르고 추가하려면, 예를 들어 위와 동일한 결과가 생성됩니다.

convert %1 -crop 1x4@ +repage %~n1_%02d.png

관련 정보