[iOS] 이미지 리사이징으로 이미지 메모리 최적화

Zoe·2024년 3월 4일

🧼 UIKit

목록 보기
6/6
post-thumbnail

오늘은 간단하게 개념 정리 후 코드로 풀어보는 건 다음에 추가해보겠다!

이미지

JPEG, png 등의 이미지는 UIImage를 사용하여 로드됨

  • 이 이미지들은 디코딩을 거쳐 이미지 버퍼에 저장된 후 UIImageView를 통해 화면에 그려짐

이미지 버퍼의 크기는 뷰의 크기 또는 파일의 용량이 아닌 이미지의 픽셀 크기와 색 영역에 따라 달라집니다

→ 디코딩을 거칠 경우 아래와 같은 형태로 저장되기 때문

  • 큰 이미지를 처리할 때 CPU와 메모리를 많이 사용하게 됨 → UI 처리를 위한 자원이 부족, 앱 버벅거림 현상 발생, 배터리 많이 사용됨.
  • 이를 해결하기 위해 작은 크기의 이미지와, 필요한 색 영역을 사용하여 자원을 절약

리사이징

이미지 리사이징을 거치 전의 파이프 라인.

  • 이미지 버퍼에는 원본 이미지의 데이터가 그대로 들어가 있으나, 이미지 뷰의 크기는 그에 비해 작음.
    → 이미지 뷰의 크기에 맞게 그려지지만, 이미지 버퍼때문에 불필요하게 많은 메모리를 사용하게 됨

리사이징을 거친 후의 이미지파이프라인

  • 이미지 뷰가 필요로 하는 크기에 맞추어 리사이즈를 했더니, 이미지 버퍼에 딱 필요한 만큼만 픽셀 정보가 들어가 있는 것을 볼 수 있음
  • 적절한 크기로 리사이즈만 해줘도 메모리를 많이 절약할 수 있습니다. 이미지 리사이즈는 Image I/O를 사용

색 영역

색 영역에 따라 메모리 사용량이 달라짐.

  • 앱 개발 시 보통 SRGB format을 사용하며, 최근 출시된 애플의 기기에서는 Wide format도 사용됩니다.

다양한 색 영역 중 적절한 포맷을 선택하기 위해 Apple에서는 iOS 10에서 UIGraphicsImageRenderer를 추가했습니다. 항상 SRGB 포맷을 사용하던 UIGraphicsBeginImageContextWithOptions대신 사용할 수 있습니다.

참고자료🔗

0개의 댓글