HEIC를 JPG로 변환
아직 넣은 파일이 없습니다. 결과가 여기에 표시됩니다.
왜 아이폰 사진만 안 열리는가
아이폰은 2017년 iOS 11부터 사진을 HEIC로 저장합니다. 같은 화질에서 JPG의 절반 정도 용량이라 저장 공간에는 이득이지만, 대가는 호환성입니다. 윈도우 기본 사진 앱, 오래된 포토샵, 관공서·학교의 업로드 폼, 상당수의 웹 게시판이 아직 이 형식을 읽지 못합니다.
그래서 "사진이 깨졌다"가 아니라 "이 형식은 지원되지 않습니다"가 뜹니다. 파일은 멀쩡하고, 담는 그릇만 바꾸면 됩니다. 이 페이지가 하는 일이 그것입니다.
참고로 아이폰에서 아예 JPG로 찍게 만들 수도 있습니다 —설정 → 카메라 → 포맷 → 높은 호환성. 앞으로 찍을 사진에만 적용되므로, 이미 찍은 사진은 여기서 변환하는 편이 빠릅니다.
무엇이 어디서 실행되는가
변환이 여러분의 브라우저 안에서 끝납니다. 사진은 어디로도 전송되지 않습니다. 개발자도구 네트워크 탭을 켜고 써 보면, 파일을 고른 뒤로는 사진과 관련된 요청이 하나도 발생하지 않는 것을 볼 수 있습니다.
브라우저마다 사정이 조금 다릅니다. 사파리(맥·아이폰)는 HEIC를 이미 읽을 줄 압니다 — 운영체제의 코덱을 그대로 쓰므로 추가로 받는 것이 없습니다. 크롬·파이어폭스처럼 HEIC를 모르는 브라우저에서는 그때만 해독기를 내려받습니다 — 압축 전송 기준 약 500KB이고, 사진을 한 장이라도 고른 뒤에만 받습니다. 이것도 사진이 나가는 것이 아니라 프로그램이 들어오는 것이고, 한 번 받으면 캐시되어 두 번째 파일부터는 기다림이 없습니다.
브라우저 이름으로 짐작하지 않고 실제로 해 보고 안 되면해독기를 받습니다. "어느 버전부터 지원한다"는 식의 정보는 운영체제마다 갈리고 실제로 서로 어긋나 있어서, 시도해 보는 것만이 사실이기 때문입니다.
변환하면 무엇이 달라지는가
셋이 바뀝니다. 미리 알고 있어야 나중에 놀라지 않습니다.
파일이 대개 커집니다. HEIC가 더 효율적인 코덱이라, 같은 사진을 JPG로 다시 구우면 보통 1.5~2배가 됩니다. 화면의 각 줄에 변화율을 함께 적어 두었습니다 — 숨기면 나중에 용량을 보고 당황하게 됩니다.
촬영 정보가 사라집니다. 촬영 일시, 카메라 기종, 렌즈, 그리고 GPS 좌표가 결과 파일에 남지 않습니다. 브라우저의 그리기 엔진을 거치면서 픽셀만 남기 때문입니다. 사진을 남에게 보내거나 인터넷에 올릴 때는 이게 오히려 안전한 쪽입니다. 반대로 촬영 날짜로 사진을 정리하고 있었다면 원본 HEIC를 지우지 마세요.
다시 압축됩니다. HEIC를 풀어서 JPG로 새로 굽는 과정이라 원리상 손실이 한 번 더 생깁니다. 아래 화질 설정이 그 정도를 정합니다.
화질은 어떻게 고르는가
JPG는 손실 압축이고, 그 강도를 0~1 사이 숫자 하나로 정합니다. 세 가지만 남겨 두었습니다.
| 설정 | 품질값 | 이럴 때 |
|---|---|---|
| 최고 화질 | 0.95 | 원본에 가장 가깝습니다. 파일이 큽니다 |
| 권장 | 0.85 | 눈에 띄는 손실 없이 용량을 줄입니다 |
| 작게 | 0.7 | 메일·메신저 첨부용. 확대하면 뭉갬이 보입니다 |
고민된다면 권장을 그대로 두세요. 인쇄하거나 나중에 크게 자를 사진이라면 최고 화질을, 메신저로 보내기만 할 사진이라면 작게를 고르면 됩니다. 설정을 바꾸면 이미 변환한 사진을 다시 구울 수 있는 버튼이 나타납니다 — 원본을 그대로 들고 있기 때문에, 다시 넣지 않아도 됩니다.
품질값을 낮출수록 하늘·피부처럼 색이 완만하게 변하는 부분에서 네모난 얼룩이 먼저 보입니다. 0.8 아래에서 눈에 띄기 시작합니다.
여러 장을 한 번에
카메라롤에서 사진을 옮기면 한 장이 아니라 수십 장입니다. 파일을 한꺼번에 끌어다 놓으면 순서대로 처리하고, 다 되면 ZIP 하나로내려받을 수 있습니다. 개별 저장도 각 줄에서 됩니다.
기기의 코어 수에 맞춰 동시에 여러 장을 처리하되 넷을 넘지 않습니다. 파일 개수만큼 동시에 돌리면 휴대폰에서는 메모리가 모자라 탭이 그냥 죽습니다. 메모리가 적은 기기로 판단되면 둘로 줄입니다.
한 장이 실패해도 나머지는 끝까지 갑니다. 50장 중 1장이 깨진 파일이어도 49장은 정상적으로 나오고, 실패한 줄에만 이유가 적힙니다. 이름이 같은 파일이 섞여 들어오면 순번을 붙입니다 — 그러지 않으면 ZIP을 풀 때 조용히 덮어써져 장수가 줄어듭니다.
잘 안 되는 경우
Live Photo는 사진 한 장과 짧은 동영상이 한 파일에 들어 있습니다. 여기서는 대표 사진 한 장만 변환합니다 — 움직임은 JPG로 옮길 수 있는 것이 아닙니다.
확장자만 .heic인 파일이 의외로 많습니다. 메신저나 메일을 거치면서 이미 JPG로 바뀌었는데 이름만 남은 경우입니다. 이 도구는 확장자가 아니라 파일의 앞부분을 직접 읽어서 판별하므로, 그럴 때는"이미 JPG입니다"라고 알려 줍니다.
아주 큰 사진은 줄여서 저장할 수 있습니다. 브라우저가 한 번에 그릴 수 있는 이미지 크기에는 기기별 한계가 있고, 가장 낮은 쪽(아이폰 사파리)에 맞춰 약 1,680만 화소를 상한으로 둡니다. 일반적인 아이폰 사진(1,200만 화소)은 해당되지 않지만 48메가픽셀 모드로 찍은 사진은 걸립니다. 그럴 때는줄였다는 사실과 실제 크기를 그 줄에 표시합니다. 조용히 축소해서 내보내지 않습니다.
AVIF는 HEIC와 파일 구조가 같아 헷갈리기 쉽지만 다른 형식이라 여기서 처리하지 않습니다. 구분해서 알려 줍니다.
이 페이지가 내려받는 소프트웨어
HEIC를 읽는 해독기는 libheif(libde265 포함)이고LGPL-3.0으로 배포됩니다. 우리는 배포본을 고치지 않고 그대로 싣습니다. 라이선스 전문과 교체 방법은고지 파일과LGPL-3.0 · GPL-3.0 전문에 있습니다.
이 해독기는 디코더만 들어 있습니다 — 배포하는 WebAssembly 바이너리에 HEVC 인코더(x265·kvazaar 등)는 링크되어 있지 않습니다. 그래서 이 페이지는 HEIC를 읽을 수만 있고 만들지는 못합니다.
근거
- Apple, "Using HEIF or HEVC media on Apple devices"아이폰이 언제부터 어떤 조건에서 HEIC로 저장하는지, 그리고 "높은 호환성" 설정이 무엇을 바꾸는지에 대한 제조사 문서
- HEIF — High Efficiency Image File Format (Nokia Technologies)MPEG가 표준화한 HEIF 컨테이너의 기술 문서와 참조 구현. HEIC는 이 컨테이너에 HEVC로 부호화된 영상을 담은 것이다
- libheif — HEIF/AVIF file format decoder and encoder이 페이지가 브라우저에서 실행하는 해독기의 원 저장소. 디코더만 포함된 빌드이며(인코더는 링크되어 있지 않다) 우리는 배포본을 고치지 않는다
- MDN — OffscreenCanvas.convertToBlob()JPG로 굽는 데 쓰는 브라우저 내장 인코더. 품질값의 범위(0~1)와, 요청한 형식을 지원하지 않으면 조용히 PNG로 떨어진다는 규정이 여기 있다 — 그래서 결과의 형식을 매번 확인한다