파일 업로드
  1. base64hub
  2. 이미지 도구
  3. Base64 → GIF

Base64를 GIF로

GIF의 Base64를 붙여넣으면 바로 여기서 애니메이션이 재생됩니다. 모든 프레임, 타이밍, 투명도를 그대로 유지한 .gif로 다운로드하세요.

무료 가입 없음, 제한 없음 로컬 업로드 없음 재생 저장 전 애니메이션 미리보기 업데이트 2026. 10. 27.
입력 –출력 –크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base64를 GIF로 변환하는 방법

  1. 입력란에 Base64나 data:image/gif;base64,... URI를 붙여넣거나, 이를 담은 .txt 파일을 여세요.
  2. 상태 표시줄의 감지된 형식이 GIF인지 확인하세요. 미리보기에서 애니메이션이 재생되기 시작하고, 그 위에 픽셀 크기가 표시됩니다.
  3. 파일 다운로드를 눌러 .gif로 저장하세요.

다시 그리거나 다시 압축하는 것은 없습니다. 저장된 파일은 인코딩된 GIF와 프레임, 지연 시간, 팔레트, 투명도가 모두 같습니다.

정말 GIF인지, 애니메이션인지 확인하기

GIF는 GIF89a 또는 GIF87a로 시작하며, Base64로는 R0lGODlh 또는 R0lGODdh입니다. 애니메이션, 투명도, 반복 제어는 모두 더 새로운 89a 버전이 필요하므로, R0lGODdh로 시작하는 문자열은 사실상 정지 이미지입니다.

89a 파일이 움직이는지는 내용, 즉 이미지 블록이 하나인지 여러 개인지에 달려 있습니다. 미리보기를 보면 한눈에 알 수 있습니다. 더 자세히 보려면 hex 덤프 표시를 여세요. 애니메이션 GIF는 보통 ASCII 열에 NETSCAPE2.0이라는 텍스트가 있는데, 이것이 반복 횟수를 담은 블록입니다. 색상 표가 작으면 첫 몇 줄에 나옵니다. 256색 전체 색상 표가 있는 GIF는 팔레트 768바이트가 먼저 오므로, 이 블록이 덤프에 표시되는 512바이트 뒤로 밀려납니다.

페이지에 “GIF이(가) 아니라 WebP(으)로 보입니다.“가 나오거나 MP4라고 표시된다면, “GIF"가 도중에 변환된 것입니다. 메신저 앱과 GIF 검색 서비스는 훨씬 작다는 이유로 애니메이션을 WebP나 MP4 동영상으로 전달하는 경우가 많습니다. 다운로드 버튼으로 실제 확장자로 저장하거나, MP4라면 Base64를 동영상으로에서 여세요.

코드에서 프레임, 타이밍, 반복 확인하기

편집기를 열지 않고 GIF를 살펴보려면 Pillow가 필요한 정보를 모두 읽어 줍니다.

import base64, io
from PIL import Image

def gif_info(b64: str) -> dict:
    data = base64.b64decode(b64.split(",", 1)[-1])
    with Image.open(io.BytesIO(data)) as im:
        durations = []
        for i in range(getattr(im, "n_frames", 1)):
            im.seek(i)
            durations.append(im.info.get("duration", 0))
        return {
            "size": im.size,
            "frames": len(durations),
            "total_ms": sum(durations),
            "loop": im.info.get("loop"),
        }

프레임당 100 ms인 3프레임 테스트 애니메이션이라면 {'size': (20, 20), 'frames': 3, 'total_ms': 300, 'loop': 0}을 돌려줍니다. loop가 0이면 “무한 반복"이고, None이면 파일에 반복 블록이 없어 한 번만 재생됩니다. 파일 처리는 Python에서 Base64에 더 자세히 있습니다.

Base64 GIF가 나오는 곳

  • data:image/gif;base64,...로 인라인한 CSS와 HTML 로딩 스피너. CSS 애니메이션과 SVG가 흔해지기 전의 습관입니다.
  • 작은 애니메이션 로고를 넣은 오래된 HTML 이메일 템플릿과 서명.
  • 스티커나 반응을 Base64 필드로 담은 API 응답과 채팅 내보내기.
  • 자리 표시자 픽셀: 빈 src로 쓰는 1×1 GIF입니다. 미리보기가 비어 보이므로, 디코딩이 실패했다고 판단하기 전에 크기를 확인하세요.

디코딩한 GIF의 크기

GIF는 모든 프레임을 오래된 압축 방식으로 저장하므로 짧은 애니메이션도 금세 MB 단위가 되고, Base64가 그 위에 3분의 1을 더합니다. 크기 행에는 디코딩된 크기가 표시됩니다. “작은” GIF 문자열이 5 MB라면 GIF는 약 3.75 MB입니다. 여기서 디코딩하는 데는 문제가 없지만, 다시 페이지에 인라인하기에는 좋지 않습니다. 손볼 생각이라면 짧은 MP4나 WebM 반복 영상이 대개 몇 분의 1 크기입니다. GIF를 인코딩하려면 GIF를 Base64로를 사용하세요.

자주 묻는 질문

디코딩한 GIF가 한 번만 재생되는 이유는 무엇인가요?

반복 설정은 파일의 일부입니다. NETSCAPE2.0 블록이 없거나 반복 횟수가 1이면 브라우저는 애니메이션을 한 번 재생하고 마지막 프레임에서 멈춥니다. 디코딩은 파일에 적힌 대로 유지하므로, GIF 편집기에서 바꾸세요.

Base64 GIF의 프레임 수는 어떻게 세나요?

미리보기는 GIF를 재생하지만 프레임을 세지는 않습니다. Python에서는 Pillow의 n_frames가 개수를 알려 주고, 프레임별 duration을 더하면 전체 길이가 됩니다. 이 페이지의 코드가 둘 다 처리합니다.

GIF가 중간에 멈추거나 마지막 프레임이 깨지는 이유는 무엇인가요?

Base64가 잘렸기 때문입니다. 브라우저는 도착한 프레임까지만 재생하고 데이터가 끝나는 곳에서 멈춥니다. 완전한 GIF는 트레일러 바이트 3B로 끝나므로 Base64는 보통 ADs=, Ow==, A7로 끝납니다.