[c++] libjpeg-turbo와 이미지 포맷 변환

이미지를 다양한 포맷으로 변환하여 사용해야 할 때가 있습니다. C++에서 libjpeg-turbo 라이브러리를 사용하여 이미지를 JPEG 형식으로 변환하는 방법을 살펴보겠습니다.

libjpeg-turbo 소개

libjpeg-turbo는 JPEG 이미지를 빠르게 처리하기 위한 라이브러리로, SIMD 명령어를 이용하여 성능을 향상시킨 것이 특징입니다. 이 라이브러리를 사용하면 이미지를 빠르게 압축하고 해제할 수 있어서 이미지 변환에 효율적으로 활용할 수 있습니다.

라이브러리 설치

libjpeg-turbo 라이브러리는 여러 플랫폼에서 지원됩니다. 다양한 방법으로 라이브러리를 설치할 수 있으며, 각 플랫폼에 따라 설치 방법이 다를 수 있습니다.

이미지를 JPEG로 변환하는 예제

아래는 libjpeg-turbo를 사용하여 이미지를 JPEG로 변환하는 C++ 코드의 예제입니다.

#include <jpeglib.h>

void convertImageToJpeg(const unsigned char* imageData, int width, int height, int quality, const char* outputFilename) {
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;

    FILE *outfile;
    JSAMPROW row_pointer[1];
    int row_stride;

    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_compress(&cinfo);

    if ((outfile = fopen(outputFilename, "wb")) == NULL) {
        fprintf(stderr, "Can't open %s\n", outputFilename);
        return;
    }
    jpeg_stdio_dest(&cinfo, outfile);

    cinfo.image_width = width;
    cinfo.image_height = height;
    cinfo.input_components = 3;
    cinfo.in_color_space = JCS_RGB;

    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, quality, TRUE);
    jpeg_start_compress(&cinfo, TRUE);

    row_stride = width * 3;

    while (cinfo.next_scanline < cinfo.image_height) {
        row_pointer[0] = (JSAMPROW) &imageData[cinfo.next_scanline * row_stride];
        (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
    }

    jpeg_finish_compress(&cinfo);
    fclose(outfile);
    jpeg_destroy_compress(&cinfo);
}

위 코드 예제는 libjpeg-turbo를 사용하여 이미지를 JPEG로 변환하는 함수인 convertImageToJpeg를 보여주고 있습니다. 함수는 이미지 데이터, 너비, 높이, 품질 및 출력 파일 이름을 입력으로 받아 JPEG로 변환합니다.

사용 예시

const unsigned char* imageData; // 이미지 데이터
int width, height; // 이미지의 너비와 높이
int quality = 90; // JPEG 품질
const char* outputFilename = "output.jpg"; // 출력 파일 이름

convertImageToJpeg(imageData, width, height, quality, outputFilename);

결론

libjpeg-turbo 라이브러리는 이미지를 효율적으로 변환하기 위한 강력한 도구입니다. 위 예제를 참고하여 이미지를 JPEG로 변환하는 방법을 익혀보고, 다양한 포맷으로의 이미지 변환에 활용해 보세요.