[c++] libjpeg-turbo와 가변 압축 비율

libjpeg-turbo는 JPEG 이미지 포맷을 안정적으로 처리하는 고성능 라이브러리이다. 이 라이브러리는 특히, 가변 압축 비율에 대한 지원으로 알려져 있다.

libjpeg-turbo란?

libjpeg-turbo는 JPEG 이미지 압축과 해제에 사용되는 C언어 라이브러리로, SIMD 명령어를 활용하여 JPEG 이미지의 인코딩 및 디코딩 프로세스를 가속화한다. 이에 따라 libjpeg-turbo는 다른 JPEG 라이브러리에 비해 높은 성능을 보여준다. 또한 이 라이브러리는 가변 압축 비율을 지원하여, 이미지의 품질과 용량을 조정할 수 있다.

가변 압축 비율이란?

가변 압축 비율은 압축된 이미지의 파일 크기를 제어할 수 있는 기능이다. 이 기능을 사용하면 이미지의 품질을 유지하면서도 파일 크기를 줄일 수 있다. 가변 압축 비율은 주로 JPEG 이미지의 품질을 조정하는 데 사용되며, 높은 품질의 이미지가 필요한 경우 손실 없는 이미지에 대한 선택적인 인코딩을 할 수 있다.

가변 압축 비율은 libjpeg-turbo에서 jpeg_set_quality() 함수를 사용하여 지정할 수 있다. 이 함수를 사용하면 이미지의 원하는 품질과 파일 크기에 따른 압축률을 설정할 수 있다.

libjpeg-turbo에서의 가변 압축 비율 사용법 예시

다음은 libjpeg-turbo에서의 가변 압축 비율 사용법에 관한 간단한 예시 코드이다.

#include <stdio.h>
#include <jpeglib.h>

int main() {
  struct jpeg_compress_struct cinfo;
  struct jpeg_error_mgr jerr;
  cinfo.err = jpeg_std_error(&jerr);
  jpeg_create_compress(&cinfo);
  
  FILE *outfile = fopen("output.jpg", "wb");
  if (!outfile) {
    fprintf(stderr, "Cannot open output file\n");
    return 1;
  }
  jpeg_stdio_dest(&cinfo, outfile);
  
  cinfo.image_width = 640;
  cinfo.image_height = 480;
  cinfo.input_components = 3;
  cinfo.in_color_space = JCS_RGB;
  
  jpeg_set_defaults(&cinfo);
  jpeg_set_quality(&cinfo, 75, true); // 품질과 가변 압축 비율 지정
  jpeg_start_compress(&cinfo, true);
  // 이미지 데이터를 기록하는 코드
  
  jpeg_finish_compress(&cinfo);
  jpeg_destroy_compress(&cinfo);
  fclose(outfile);
  return 0;
}

위 예시에서 jpeg_set_quality() 함수를 통해 75라는 값으로 품질을 지정하고, 두 번째 매개변수에 true를 설정하여 가변 압축 비율을 활성화한다.

사용자는 필요에 따라 품질을 조정하고, 가변 압축 비율을 설정하여 이미지 압축률을 조절할 수 있다.

결론

libjpeg-turbo는 가변 압축 비율을 통해 사용자가 이미지의 품질과 파일 크기를 조정할 수 있는 강력한 기능을 제공한다. 이를 통해 사용자는 JPEG 이미지의 압축률을 높이거나 낮추면서도 이미지의 품질을 유지할 수 있다.

참고: libjpeg-turbo 공식 문서