티스토리 뷰

안드로이드 앱을 개발하면서 이미지 파일을 다루는 일이 굉장히 흔하다. 안드로이드 앱에서 이미지 파일은 Bitmap을 이용해서 다루는데, Bitmap 객체를 이미지를 파일로 저장하고 싶을 때 Bitmap의 compress() 메서드를 이용한다.

compress() 메서드 구현체는 아래와 같다.

public boolean compress(CompressFormat format, int quality, OutputStream stream) {...}

 

 

여기서 첫 번째 인자로 받는 CompressFormat은 JPEG, PNG, WEBP로 3가지 종류가 있다.

두 번째 인자인 quality는 압축 정도를 나타내는데 0~100의 숫자를 넣으면 (quality)%로 압축이 된다.

마지막으로 OutputStream은 Bitmap 이미지를 저장하기 위한 output stream 객체를 받는다.

 

프로젝트를 진행하던 중에 Bitmap 이미지를 파일로 변환해야 하는 과정에서 CompressFormat에 JPEG, PNG, WEBP의 세 종류가 있음을 알았고, 이 중에서 어떤 Format을 사용하는 것이 좋은지 찾아보았다. 이번 포스팅에서는 그렇게 알게 된 내용을 정리하려고 한다.

 

 


 

압축 포맷을 비교하기 전에 앞으로 나올 용어인 손실 압축과 비손실 압축(무손실 압축)부터 알아보자.

손실 압축원본 데이터를 압축 할 때 어느정도 데이터 손실이 발생하는 압축 방법으로, 이미지, 동영상, 오디오 등 미디어 압축 등이 있다. 반면에 비손실 압축원본 데이터와 압축을 한 뒤 다시 복원한 데이터가 100% 일치하는 압축 방법으로 파일 압축 시에 비손실 압축이 쓰인다.

 

 

 

[JPEG] 통합 사진 전문 단체(Joint Photographic Experts Group)에서 만든 디지털 이미지 규격

  • 장점 - 용량에 비해 우수한 품질, 빠른 압축속도

  • 단점 - 투명도 사용 불가능, 손실 압축으로 압축 시 화질 저하

  • 특징 - jpg는 데이터가 손실되지만 용량이 작아 웹에서 널리 쓰인다. 하지만 JPG는 RGB색상 공간을 사용하기 때문에 투명도(Apaque)를 사용할 수 없다.

 

[PNG] 이동성 네트워크 그래픽(Portable Network Graphics)

  • 장점 - 투명도 사용 가능, 비손실 압축으로 고품질 이미지 생성

  • 단점 - jpg에 비해 상대적으로 느린 압축속도, 조금 더 큰 용량.

  • 특징 - 비손실 압축으로 이미지에 투명도가 있을 수 있다.

 

[WEBP] 구글에서 만든 이미지 파일 형식

API 18 이상에서부터 손실 압축과 무손실 압축을 모두 지원. 이전 버전에서는 손실 압축만 가능.

 

 

 

 

직접 3가지 포맷으로 테스트해본 결과는 다음과 같았다.

압축 속도는 JPEG가 가장 빠르고 PNG와 WEBP가 비슷하게 비교적 느렸고, 파일 용량은 WEBP가 가장 작고 그 다음이 JPEG이고 PNG 파일이 가장 컸다.

 

여기서 압축 속도를 1순위로 두고 화질을 2순위로 기준을 두고 봤을 때, JPEG가 속도는 빠르면서 화질도 나쁘지 않아서 JPEG 포맷으로 이미지 파일을 저장하기로 했다.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함