스프라이트 시트 만들기·자르기
게임·웹 애니메이션용 스프라이트를 만들거나, 받은 스프라이트 시트를 장면별로 나눌 때 쓰세요.
처음 쓸 때 이미지 엔진(ImageMagick, 약 15MB)을 한 번 내려받아요. 그다음부터는 브라우저에 저장된 것을 써요.
스프라이트 시트란?
스프라이트 시트는 캐릭터 동작이나 아이콘 애니메이션의 장면들을 한 장의 큰 그림에 격자로 붙여 놓은 거예요. 게임 엔진과 웹 페이지는 그림 한 장만 불러온 뒤 보여 줄 칸만 바꿔 가며 애니메이션을 만들어서, 장면마다 파일을 따로 불러오는 것보다 빠르고 가벼워요. 이 도구는 움짤을 시트로 바꾸거나, 받은 시트를 다시 장면별 그림으로 잘라 줘요.
시트 만들기
- 넣을 것 — 움직이는 GIF·WEBP·APNG 하나를 넣으면 모든 장면을 완성된 그림으로 꺼내(장면 차이만 저장된 GIF도 합성) 순서대로 붙여요. 그림 여러 장을 넣으면 넣은 순서대로 붙여요.
- 칸 수·간격·크기 — ‘자동’은 정사각형에 가까운 격자로, ‘한 줄로 모두’는 가로 한 줄로 붙여요. 간격 1~2px은 확대 시 옆 칸 색이 번져 보이는 것을 막아 줘요. 장면 크기가 다르면 가장 큰 장면에 맞춘 칸 가운데에 놓아요.
- 받는 파일 — 시트 PNG, 장면 위치·크기·시간을 담은 JSON(TexturePacker의 JSON Hash 형식이라 Phaser·PixiJS에서 바로 읽어요), 시트를 움직이는 CSS 코드, 확인용 demo.html을 ZIP으로 받아요.
시트 자르기
가로·세로 칸 수와 칸 사이 간격을 넣으면 자를 선을 파란 격자로 미리 보여 줘요. 가로가 세로의 정수배인 한 줄 시트는 칸 수를 자동으로 맞춰요. 빈 칸(완전히 투명한 칸)은 빼고, 장면별 PNG를 ZIP으로 받거나 지정한 장면 시간으로 움직이는 GIF를 만들어요.
어떻게 동작하나요와 한계
움짤 해독과 GIF 저장은 ImageMagick 7(magick-wasm)이 브라우저 작업자에서, 배치와 자르기는 캔버스가 처리해요. 파일은 서버로 보내지 않아요. 빈 공간을 줄이는 자동 배치(빈틈 채우기, 회전 배치)와 장면 테두리 자르기(트림)는 하지 않아요. 칸 크기가 다른 불규칙한 시트는 JSON 없이 자르기 어려워요.
참고한 자료
자주 묻는 질문
Phaser에서 어떻게 불러오나요?
받은 PNG와 JSON을 함께 올리고 this.load.atlas('이름', '시트.png', '시트.json')으로 불러오면 돼요. 칸이 모두 같으므로 load.spritesheet에 칸 크기(frameWidth·frameHeight)를 넣어도 돼요.
장면 시간이 다른 움짤도 되나요?
네. JSON에는 장면별 시간(duration, 밀리초)이 들어가고, CSS 애니메이션도 장면별 시간 비율대로 넘어가요.
파일이 서버로 올라가나요?
아니요. 이 기기 브라우저 안에서만 처리해요.
함께 쓰면 좋은 도구
- GIF 프레임 나누기 (움짤을 장면별 PNG·JPG로 추출)움직이는 GIF·WEBP·APNG를 장면(프레임)별 그림으로 — 장면 시간 확인, 골라서 PNG·JPG·WEBP ZIP
- 이미지 합치기 (사진 가로·세로로 이어 붙이기)사진 여러 장을 가로 한 줄 또는 세로로 길게 한 장으로, 간격·배경색
- GIF 만들기 (사진 여러 장으로 움짤 만들기)사진 여러 장을 순서대로 넘어가는 움짤로, 속도·크기·반복·부메랑
- 사진 용량 줄이기 (목표 용량 KB 지정)JPG·PNG를 300KB 이하처럼 목표 용량에 맞춰 압축, 여러 장 ZIP
- PNG 용량 줄이기 (투명 배경 그대로, 색 수 줄이기·무손실 최적화)투명 배경을 지킨 채 PNG를 60~80% 작게: 색 수 줄이기(256색 이하) + 무손실 최적화, 여러 장 ZIP
- 사진 크기 바꾸기 (픽셀·비율 리사이즈)가로·세로 픽셀, 퍼센트, 자주 쓰는 크기로 여러 장 한 번에