← back to apps

app · iOS · android

LitePhoto

이미지 용량을 가볍게, 사이즈는 원하는 대로, 포맷은 필요한 만큼. 사진 한 장 / 여러 장을 빠르게 다듬는 단순한 도구.

Swift Clean Architecture Kotlin AdMob i18n

서비스 소개

LitePhoto 는 사진을 보내거나 올리기 전에 — 용량을 줄이고, 사이즈를 맞추고, 포맷을 바꾸는 — 작은 단계를 한 화면에서 처리하는 유틸입니다. 광고를 한 번 보면 결과 이미지를 사진첩에 저장할 수 있는 구조로, 가벼운 도구가 본업을 벗어나지 않도록 단순함을 우선했습니다.

iOS 는 Swift + 클린 아키텍처, Android 는 Kotlin 네이티브로 별도 구현했습니다.

Behind the scenes

지금도 못 고친 한 가지 — "예상 용량과 실제 저장 용량이 다르다" 는 문제.

  1. 01

    정확한 용량을 알려주는 게 가장 어렵다

    압축 슬라이더를 움직이면 — 결과 용량이 얼마가 될지를 화면에서 미리 보여주는 게 이 앱의 핵심 약속입니다. 그런데 그 숫자를 진짜로 정확하게 만드는 게 끝까지 안 풀렸습니다. 이유는 코드에서 뽑는 인코딩 결과의 크기와, 그걸 사진첩에 저장한 뒤 다시 들여다본 파일 크기가 일치하지 않기 때문입니다 — 작게는 몇 KB, 크게는 수십 KB까지 차이가 납니다. 원인은 한 군데가 아니라 여러 층에 흩어져 있습니다. 인코더가 압축한 raw 바이트 외에 — EXIF / GPS 같은 메타데이터, ICC 컬러 프로파일, 컨테이너 헤더 / 박스(특히 HEIC), 사진첩 시스템이 저장 시점에 다시 끼워 넣는 메타데이터까지 — 각각이 작은 차이를 더하고, 시스템 버전 / 디바이스마다 그 차이가 또 달라집니다.

    막막해서 비슷한 류의 사진 압축 앱들을 살펴보니 — 정도의 차이는 있어도 다른 앱들도 같은 문제를 겪고 있었습니다. 표시 용량은 어림값이고 저장 후 실제 용량은 따로인 — 이게 사실상 이 카테고리의 고질병에 가까웠습니다. 현재는 인코딩 직후 바이트 길이를 기준으로 표시하되, 메타데이터 / 컨테이너 차이를 보수적으로 가산하는 식으로 오차를 줄이는 정도로 합의를 봤습니다. 언젠가 사진첩 저장 후 실제 파일 크기를 비동기로 다시 측정해 보정값을 학습시키는 방향이 — 이 앱이 푸는 다음 큰 숙제입니다.

Screenshots

카드를 누르면 큰 이미지로 볼 수 있습니다.

More

지나온 버전과 앞으로 들어갈 항목을 별도 페이지에서 확인할 수 있습니다.