SVG Base64 변환기

SVG 아이콘, 로고, 일러스트를 img 태그, CSS 배경, JSON에 쓸 수 있도록 Base64로 인코딩합니다. 인코딩하기 전에 SVG를 PNG, JPEG, WebP로 래스터화할 수도 있습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. .svg 파일을 드롭 영역에 끌어다 놓거나, 클릭해서 선택하거나, 이미지를 붙여넣습니다.
  2. SVG 마크업 자체를 인코딩하려면 ‘변환 형식’을 ‘원본 유지’로 두고, 픽셀 이미지로 바꾸려면 PNG, JPEG, WebP 중 하나를 선택합니다.
  3. 래스터화하는 경우 ‘최대 너비’로 픽셀 크기를 조절합니다.
  4. 스타일시트에는 CSS 배경 이미지 출력을 복사하고, 그 밖의 용도에는 data URI, 순수 Base64, img 태그, Markdown 버전을 사용합니다.

data URI로 쓰는 SVG

SVG(Scalable Vector Graphics, MIME 유형 image/svg+xml)는 도형을 XML 텍스트로 기술하므로 어떤 크기에서도 선명합니다. SVG의 Base64는 보통 PHN2Zy(<svg를 인코딩한 값)로 시작하며, 파일이 XML 선언으로 시작하면 PD94bWw로 시작합니다.

SVG를 이미지로 사용할 때는 루트 요소에 xmlns="http://www.w3.org/2000/svg"가 있어야 합니다. HTML에서 복사한 인라인 코드 조각에는 이 속성이 빠진 경우가 많으며, 그러면 data URI가 아무것도 표시하지 않습니다. 또한 이미지 모드에서는 외부 리소스가 차단되므로 SVG 안의 웹 글꼴이나 링크된 이미지가 로드되지 않습니다. 텍스트를 패스로 변환하거나 해당 리소스를 먼저 포함시키십시오.

Base64와 URL 인코딩 중 무엇을 쓸까

SVG는 원래 텍스트이므로 data URI에 마크업을 그대로 담고 일부 문자(<, >, #, %, 따옴표)만 퍼센트 인코딩할 수 있습니다. CSS에 넣는 일반적인 아이콘이라면 이 방식이 Base64보다 짧고 gzip으로도 더 잘 압축됩니다. 따옴표나 특수 문자를 망가뜨리는 시스템을 거치는 문자열이거나 API가 Base64를 요구하는 경우에는 Base64가 더 안전합니다.

/* Base64 */
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0i...");

/* 퍼센트 인코딩 */
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'...");

퍼센트 인코딩 형식을 만들려면 Data URI 생성기에서 ‘퍼센트 인코딩’을 선택하십시오.

신뢰할 수 없는 SVG 새니타이징

SVG에는 <script> 요소, onload 같은 이벤트 핸들러 속성, 다른 문서로 연결되는 링크가 들어 있을 수 있습니다. 브라우저는 <img>나 CSS 배경으로 표시한 SVG에서는 스크립트를 실행하지 않지만, 같은 파일을 HTML에 인라인으로 넣거나 단독으로 열면 스크립트가 실행될 수 있습니다. 사용자가 애플리케이션에 SVG 파일을 업로드할 수 있다면 저장하거나 삽입하기 전에 DOMPurify 같은 도구로 새니타이징하십시오. Base64는 마크업을 언뜻 보기에 감출 뿐 안전하게 만들어 주지는 않습니다.

자주 묻는 질문

SVG에는 Base64와 URL 인코딩 중 무엇이 더 좋습니까?

CSS에 넣는 SVG라면 대개 URL 인코딩이 더 짧고 읽기도 쉽습니다. 문자열이 다른 시스템을 거치거나 API가 Base64를 요구할 때는 Base64가 더 안정적입니다.

SVG data URI가 표시되지 않는 이유는 무엇입니까?
가장 흔한 원인은 루트 요소에 xmlns 속성이 없는 경우, 퍼센트 인코딩한 URI에서 #을 이스케이프하지 않은 경우, SVG가 다른 파일의 글꼴이나 이미지를 불러오는 경우입니다.
SVG를 PNG Base64 문자열로 변환할 수 있습니까?

예. ‘변환 형식’에서 PNG를 선택하십시오. 브라우저가 SVG를 픽셀로 렌더링하며, ‘최대 너비’ 옵션으로 결과를 더 작게 만들 수 있습니다.

SVG data URI를 다시 파일로 디코딩할 수 있습니까?
예. Base64 SVG 변환 도구에 붙여넣으면 미리 보고 .svg 파일을 다운로드할 수 있습니다.