스프라이트 시트 생성기

선택한 파일 복원 중...

이미지 묶음을 끌어다 놓으면 생성기가 균일한 그리드에 배치하고 브라우저 안에서 하나의 스프라이트 시트 PNG를 그린 다음, 스프라이트마다 background-position 오프셋이 있는 CSS를 출력합니다. 모든 작업이 캔버스에서 로컬로 실행되므로 서버로 업로드되는 것은 없습니다. 아이콘 세트, 레트로 게임 프레임, 여러 개의 개별 이미지 대신 하나의 파일을 원하는 UI 상태에 유용합니다. 열 수, 타일 크기, 셀 사이 간격, 배경(투명, 흰색, 검정)을 직접 설정합니다.

스프라이트 시트가 만들어지는 방식

  1. 1

    이미지 끌어다 놓기

    PNG, JPG, WebP 파일을 추가합니다. 위/아래 버튼으로 순서를 바꾸거나 원하는 프레임을 삭제할 수 있으며, 시트는 즉시 다시 만들어집니다.

  2. 2

    그리드 설정

    열 수를 고르면 추가한 이미지 수에 따라 행 수가 정해집니다. 각 이미지는 가로세로 비율을 유지한 채 정사각형 타일에 맞게 크기가 조정되고 가운데에 놓입니다.

  3. 3

    타일 크기와 간격 조정

    타일 크기를 픽셀로 고르고, 크기를 조정할 때 이웃 스프라이트가 번지지 않도록 셀 사이에 간격을 추가합니다.

  4. 4

    PNG 내려받고 CSS 복사

    스프라이트 시트를 하나의 PNG로 저장하고 생성된 CSS 클래스를 복사합니다. 이미지마다 너비, 높이, background-position이 있는 `.spr-이름` 규칙이 하나씩 만들어집니다.

배치가 작동하는 방식

생성기는 예측 가능한 단일 배치, 즉 균일한 그리드를 사용합니다. 열 수를 정하면 행 수는 올림(이미지 / 열)이 됩니다. 모든 셀은 같은 정사각형 크기(고른 타일 크기)이므로, 각 이미지는 가로세로 비율을 유지한 채 자기 셀에 맞게 조정되고 가운데에 놓입니다. 크기가 다른 이미지도 모두 같은 크기의 셀에 들어가며, 이는 background-position을 쓰는 CSS 스프라이트가 기대하는 바로 그 형태입니다.

컨트롤 범위 효과
1~16 한 행당 스프라이트 수. 행은 자동 계산
타일 크기 32~512 px 각 이미지를 맞춰 넣는 정사각형 셀
간격 0~64 px 크기 조정 시 번짐을 막는 셀 사이의 투명한 틈
배경 투명 / 흰색 / 검정 출력 PNG에서 스프라이트 뒤를 채우는 색

생성되는 CSS의 형태

각 이미지는 파일 이름을 딴 클래스(.spr-<이름>)가 되며, 타일 크기로 지정되고 자기 셀로 오프셋됩니다. 열 4개, 타일 크기 128 px, 간격 없음일 때 시트는 다음과 같습니다.

.spr-idle  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -0px; }
.spr-walk  { width: 128px; height: 128px; background: url(spritesheet.png) -128px -0px; }
.spr-run   { width: 128px; height: 128px; background: url(spritesheet.png) -256px -0px; }
.spr-jump  { width: 128px; height: 128px; background: url(spritesheet.png) -384px -0px; }
.spr-fall  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -128px; }

오프셋은 두 방향으로 움직입니다. 스프라이트는 각 행을 왼쪽에서 오른쪽으로 채운 뒤 다음 행으로 넘어갑니다. PNG를 CSS 옆에 spritesheet.png로 저장하세요(또는 경로에 맞게 url(...)을 수정하세요).

간격과 번짐

가장자리를 맞대어 채운 스프라이트는 브라우저가 시트 크기를 조정할 때(정수가 아닌 픽셀 비율, CSS 변형) 서로 번질 수 있습니다. 이웃 픽셀이 새어 들지 않도록 셀 사이에 2~4픽셀 간격을 추가하세요.

고밀도(레티나) 디스플레이

자동 2x 내보내기는 없지만, 더 선명한 시트를 간단히 만들 수 있습니다. 각 스프라이트가 더 많은 픽셀을 갖도록 더 큰 타일 크기를 고르고(예: 128 px 대신 256 px) CSS에서는 절반 크기로 표시하세요. 그러면 별도의 과정 없이 고밀도 화면에서도 선명한 스프라이트를 얻습니다.

스프라이트 시트 vs 대안

  • 스프라이트 시트: CSS의 고전적인 아이콘 세트, HTML5 게임 프레임, 많은 작은 이미지를 한 파일로 묶으면 유리한 페이지.
  • SVG 스프라이트(symbol): 현대적인 UI 아이콘에 더 적합하고, 손실 없이 확대되며, CSS fill을 받아들이고, background-position으로 씨름할 필요가 없습니다.
  • 아이콘 폰트: 제한적이지만 아주 작은 단색 아이콘에는 여전히 쓰입니다.
  • HTTP/2 또는 HTTP/3의 개별 파일: 멀티플렉싱 덕분에 요청 수의 중요성은 예전만큼 크지 않습니다.

자주 묻는 질문

이미지는 브라우저에 남습니다. 여러 단계 흐름에서는 선택한 이미지 파일과 레이아웃이 이 브라우저 탭에 최대 30분 동안만 임시 보관됩니다. 서버로 전송되거나 URL에 추가되는 것은 없습니다.

네, 다만 인라인 SVG나 SVG <symbol> 스프라이트가 대개 컴포넌트 프레임워크에 더 잘 맞습니다. CSS 스프라이트 시트는 정적 페이지에서 많은 이미지를 동시에 보여줄 때 빛을 발합니다.

각 프레임이 한 행에 오도록 열 수를 프레임 수와 같게 맞춘 뒤, CSS animation-timing-function: steps(N)과 셀 단위로 건너뛰는 background-position으로 제어하세요. 짧은 반복 애니메이션(로더, 대기 상태)에 잘 맞습니다.

그리드의 각 셀은 같은 정사각형 크기(고른 타일 크기)이므로, 각 이미지는 자기 셀에 맞춰지고 가운데에 놓입니다. 스프라이트가 이미 동일한 정사각형이라면 타일 크기를 그에 맞게 설정하면 변경 없이 통과합니다.

관련 도구