프로젝트 소개

heic-rs는 안전하고 이식 가능하며 C 종속성이 없는 순수 Rust HEIC/HEIF 이미지 디코더 구현입니다. 이 프로젝트는 'no C 툴체인' 접근 방식을 강조하여, cmake, pkg-config, 또는 libheif와 같은 외부 라이브러리 없이 표준 Rust 도구로 빌드할 수 있습니다. unsafe 코드를 엄격히 금지하여, 메모리 안전성이 수동 메모리 관리보다는 컴파일러와 런타임 검사에 의해 보장됩니다. 현재 핵심 기능은 HEIC 포맷의 컨테이너 부분에 집중되어 있습니다. 여기에는 ISOBMFF 박스 파싱, EXIF 및 ICC 프로필과 같은 메타데이터 처리, 회전, 미러링, 클린 어퍼처와 같은 이미지 속성 관리가 포함됩니다. 현재 기능의 중요한 부분은 그리드 유도 및 타일 합성으로, 이는 iPhone 및 Mac과 같은 장치에서 촬영한 실제 사진을 디코딩하는 데 필수적입니다. 이러한 사진은 종종 더 작은 타일의 그리드로 저장됩니다. 라이브러리는 또한 다양한 표준(BT.601, BT.709, BT.2020) 및 크로마 업샘플링 방법을 지원하는 YUV에서 RGB로의 색상 변환을 수행합니다. 그러나 사용자는 현재 상태를 인지해야 합니다. HEVC 스틸 픽처 디코더는 아직 크레이트에 연결되어 있지 않습니다. `probe()` 함수는 파일 메타데이터를 완전히 검사할 수 있지만, `decode()` 함수는 코덱 경계에 도달하면 `Error::Unsupported`를 반환합니다. HEVC 디코더는 별도의 크레이트로 개발 중이며, 향후 통합될 예정입니다. 그 전까지는 이 라이브러리는 메타데이터 파싱, 컨테이너 구조 처리, 그리고 HEVC 모듈이 사용 가능해지면 픽셀 디코딩을 위한 데이터 준비에 적합합니다. 이 프로젝트는 `no_std` 친화적이며 WebAssembly(wasm32-unknown-unknown)에 대해 준비되어 있어, C 종속성이 문제가 되는 브라우저 기반 이미지 처리 또는 임베디드 시스템에 적합한 옵션입니다. AGPL과 같은 카피레프트 라이선스를 사용하는 다른 순수 Rust 디코더에 비해, MIT 또는 Apache-2.0 라이선스로 제공되어 더 관대한 대안을 제공합니다. 설계는 비즈니스 로직이 I/O를 수행하지 않는 엄격한 'SBIO' 규칙을 준수하여, 코어를 순수하고 테스트 가능하게 유지합니다. 보안 기능으로는 경계 검사 파서와 `max_pixels`를 통한 구성 가능한 리소스 제한이 포함되어, 고갈 공격을 방지합니다.