Problem

APNG(Animated Portable Network Graphics)는 이름에서 알 수 있듯이 PNG 포맷을 확장한 이미지 파일 포맷으로 하위 호환성을 유지하면서 GIF같은 애니메이션 구현이 가능한 포맷이다1. 가장 큰 장점으로 하위 호환성이 유지된다는 것인데 APNG를 지원하지 않는 뷰어에서는 PNG처럼 동작하게 된다. 하위 호환성을 유지하는 방법으로 첫번째 프레임은 기존 PNG 정보를 보여주고 나머지 프레임에 애니메이션 프레임들이 이후에 추가되는 형태로 구성된다. MNG(Multiple-image Network Graphics)보다 하위 호환성을 유지한다는 점과 구현이 더 간단하다.

APNG는 흔히 카카오톡 등 메신저에서 움직이는 이모티콘 형태로 사용되기 좋은데, 안드로이드 기준으로 APNG 적용하는 방법을 확인해 보고자 한다.

Solution

  • ApngDrawable2
    • line의 오픈소스 프로젝트
    • 주로 kotlin으로 작성됨
    • 비교적 최근까지 관리되는 프로젝트
  • APNG View3
    • Java로 작성됨
    • 최근 관리되지 않음
    • 상용 프로젝트에서 사용해보니 NullPointException 등 에러 처리가 부족하여 수정이 필요한 경우가 있음.

만약, 신규 프로젝트라면 ApngDrawable를 우선적으로 검토할 것 같고 pngj 같은 라이브러리를 이용해 직접 개발을 해보는 것도 좋겠다.

References