altair의 프로젝트 일기

image_compressor 라이브러리 개선하기(2) 본문

IT/러스트

image_compressor 라이브러리 개선하기(2)

altair823 2024. 3. 4. 18:05

몇 달 전 라이브러리를 개선하는 PR이 들어온 적이 있었다. 

 비록 언젠가 수정하려고 생각했던 부분이지만 당시에는 학기 중에 과제가 쏟아지고 있었기에 제대로 확인하지도 못했고 내가 의도하지 않는 수정 사항도 많아서 수락하지 않았다. 

 1.4.1 버전까지 이미지 압축 로직은 다음과 같았다. 

  1. image 라이브러리를 사용해 원본 이미지 파일을 jpeg 파일로 변환해 저장한다. 
  2. 변환한 임시 파일을 다시 읽어와 주어진 비율만큼 리사이징하고 퀄리티를 낮춘다. 
  3. 압축된 결과 이미지를 jpeg으로 저장하고 임시파일을 삭제한다. 

 이렇다보니 압축과정에서 불필요한 파일 읽기/쓰기가 추가로 발생했다. 지금까지는 일단 작동하니까 놔뒀던 방식이지만, 시간 여유가 생긴 지금, 이를 개선할 필요가 있다고 생각했다. 

 위에서 보다시피 원본 이미지 데이터를 jpeg으로 변환하는 함수를 삭제하였다. 

 그리고 바이트 배열인 Vec<u8>이 아닌 image 라이브러리에서 사용하는 image::DynamicImage 형식으로 데이터를 관리해 더욱 쉽게 리사이징, 압축을 할 수 있었다. 

 이런 개선을 통해 임시파일을 만들지 않고 바로 압축된 jpeg 파일을 만들 수 있었으며 로직도 깔끔해지고 무엇보다 더 빠른 속도를 얻을 수 있었다. 

 소프트웨어는 역시 유지보수가 중요한 것 같다..

Comments