[c++] libpng 썸네일 생성

이미지를 불러와서 썸네일을 생성하는 것은 많은 애플리케이션에서 필요로 하는 기능입니다. libpng은 PNG 이미지를 다루는 데 유용한 라이브러리로, 썸네일 생성에도 활용될 수 있습니다.

libpng 라이브러리 다운로드 및 설치

libpng 라이브러리는 공식 웹사이트에서 다운로드 받을 수 있습니다. 다운로드한 파일을 압축 해제한 후, 다음 명령어를 사용하여 설치할 수 있습니다.

./configure
make
make install

썸네일 생성 예제 코드

아래는 libpng을 사용하여 이미지의 썸네일을 생성하는 간단한 C++ 예제 코드입니다.

#include <iostream>
#include <png.h>

void CreateThumbnail(const char* inputFileName, const char* outputFileName, int thumbnailWidth, int thumbnailHeight) {
    // libpng을 사용하여 이미지 불러오고 썸네일 생성하는 코드
    // (코드 내용은 간략화되었습니다)

    // 이미지 불러오기
    FILE *fp = fopen(inputFileName, "rb");
    png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    png_infop info = png_create_info_struct(png);
    png_init_io(png, fp);
    png_read_info(png, info);

    // 원본 이미지 크기 얻기
    int width = png_get_image_width(png, info);
    int height = png_get_image_height(png, info);
    
    // 썸네일 이미지 크기 설정
    int thumbnailWidth = width / 2;
    int thumbnailHeight = height / 2;
    
    // 썸네일 이미지 생성
    png_bytep row_pointers[thumbnailHeight];
    for (int y = 0; y < thumbnailHeight; y++) {
        row_pointers[y] = new png_byte[thumbnailWidth * 3];
        // 이미지 축소 및 쓰기 코드
        // (코드 내용은 간략화되었습니다)
    }

    // 썸네일 이미지 저장
    FILE *out = fopen(outputFileName, "wb");
    png_structp png_out = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    png_init_io(png_out, out);
    png_set_IHDR(png_out, info, thumbnailWidth, thumbnailHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
    png_write_info(png_out, info);
    png_write_image(png_out, row_pointers);
    png_write_end(png_out, NULL);

    // 메모리 및 파일 핸들 해제
    // (코드 내용은 간략화되었습니다)

    // 리소스 정리
    png_destroy_write_struct(&png_out, &info);
    fclose(out);
    fclose(fp);
    for (int y = 0; y < thumbnailHeight; y++) {
        delete[] row_pointers[y];
    }
}

이 예제 코드는 libpng을 사용하여 입력 이미지 파일을 읽어와 크기를 조절한 후, 썸네일 이미지 파일을 생성합니다.

결론

libpng을 사용하여 이미지 썸네일을 생성하는 것은 간단하지만 유용한 기능입니다. 본 예제를 참고하여 썸네일 생성에 libpng을 적극 활용해 보세요!