GIF 만들기
여러 이미지 프레임이나 스프라이트 시트로 GIF를 만들고 FPS와 크기를 조절합니다.
무료 이미지 툴킷
PNG 프레임을 하나의 스프라이트 시트로 합치고 프레임 간격과 애니메이션 미리보기를 조절합니다.
회원가입이나 결제 없이 사용할 수 있으며, 파일은 가능한 한 브라우저에서 처리됩니다.
이미지 업로드
클릭하거나 파일을 끌어오세요
대용량 이미지는 브라우저가 느려질 수 있습니다.
스프라이트 시트는 브라우저 canvas로 생성됩니다. 큰 캔버스는 브라우저 제한에 걸릴 수 있습니다.
예상 캔버스 크기: 업로드 후 자동 계산 / 한 줄 프레임 수: 4 / 행 수: -
프레임 간격은 각 프레임 사이의 거리입니다. 게임 엔진에서 일정한 셀 크기로 자동 자르기를 할 때는 0px이 편하고, 사람이 보기 쉬운 시트를 만들 때는 2~4px 정도를 권장합니다.
추천 단위는 px입니다. 픽셀 아트와 게임 리소스는 픽셀 단위 좌표가 중요하기 때문에 %, rem 같은 단위보다 px가 가장 적합합니다.
행은 아래/위/왼쪽/오른쪽 같은 방향 애니메이션으로 쓸 수 있지만 실제 의미는 이미지 구성에 따라 자유롭게 정하면 됩니다.
const image = new Image();
image.src = "spritesheet.png";
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
ctx.imageSmoothingEnabled = false;
const frameWidth = 32;
const frameHeight = 32;
const columns = 4;
const frameSpacing = 2;
const cellPadding = 0;
const outerMargin = 0;
let frame = 0;
let last = 0;
function drawFrame(index) {
const col = index % columns;
const row = Math.floor(index / columns);
const sx = outerMargin + col * (frameWidth + cellPadding * 2 + frameSpacing) + cellPadding;
const sy = outerMargin + row * (frameHeight + cellPadding * 2 + frameSpacing) + cellPadding;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(image, sx, sy, frameWidth, frameHeight, 0, 0, frameWidth, frameHeight);
}
function loop(time) {
if (time - last > 125) {
drawFrame(frame);
frame = (frame + 1) % 1;
last = time;
}
requestAnimationFrame(loop);
}
image.onload = () => requestAnimationFrame(loop);CSS steps 예시는 frame spacing이 0인 단일 행 스프라이트 시트에서 가장 단순하게 동작합니다. 여러 행이나 간격이 있으면 JavaScript 방식이 더 유연합니다.
.sprite {
width: 32px;
height: 32px;
background-image: url("spritesheet.png");
animation: play 0.13s steps(1) infinite;
}
@keyframes play {
from { background-position: 0 0; }
to { background-position: -32px 0; }
}프레임 애니메이션을 GIF로 저장하고 싶다면 GIF 만들기 도구를 사용해 보세요.
GIF 만들기 열기파일은 가능한 한 브라우저에서 처리되며 서버에 저장되지 않습니다.
이 도구는 게임 리소스용 스프라이트 시트 제작에 집중합니다. 프레임 애니메이션을 GIF로 저장하려면 GIF 만들기 도구를 사용하세요.