[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을 적극 활용해 보세요!