FreeImage, ShowMetadata example
FreeImage 라이브러리를 이용하여 JPEG 이미지 파일의 메타데이타를 읽어서 HTML 파일에 저장하는 예
FreeImage를 이용하여 특정 메타데이타 태그의 값을 추출하는 예제 참고
테스트 환경
Windows 7, VC++ 2012, FreeImage 3.15.4
소개
FreeImage는 대부분의 이미지 포맷을 지원하는 오픈소스 라이브러리이다. 다양한 언어로 래핑되어 있어서 활용도가 높으며 사용이 쉽다는 장점이 있다.
FreeImage 라이브러리를 이용하여 영상처리 및 이미지 파일의 메타데이타 관련 프로그램을 비교적 쉽게 작성할 수 있다
Download : http://freeimage.sourceforge.net/download.html
다운로드 페이지에서는 소스형태와 바이너리(Lib, DLL) 형태로도 배포하고 있다.
여기서는 FreeImage의 소스를 이용하는 예가 아니라 바이너리 형태로 배포되는 라이브러리(dll, lib) 를 이용하여 테스트 환경을 구성한 예를 소개한다
압축해제 및 FreeImage.lib, dll 파일 확인
다운로드한 바이너리 압축파일을 해제하고 FreeImage/Dist 폴더 안을 보면 프로젝트에 필요한 3가지 파일이 확인된다.
- FreeImage.dll
- FreeImage.lib
- FreeImage.h (위의 라이브러리(dll, lib)에 구현된 함수의 원형이 선언되어 있기 때문에 라이브러리를 프로젝트에 사용할 시에는 반드시 필요함)
프로젝트 생성
VC++ 2012에서 Console Application 프로젝트를 생성할 때 Empty Project를 설정하여 빈 프로젝트를 생성한다
FreeImage의 헤더파일이 포함된 디렉토리를 프로젝트에 등록한다(Project/Properties/Configuration Properties/VC++ Directories/Include Directories)
FreeImage의 라이브러리가 포함된 디렉토리를 프로젝트에 등록한다( 위와 동일~/VC++ Directories/Library Directories)
작성하는 cpp 파일에는 #pragma comment(lib, "FreeImage.lib") 를 이용하여 Linker에 의해 FreeImage.lib 파일이 실행파일에 포함되도록 설정한다
FreeImage.dll 파일은 프로그램이 실행시에 로드되므로 컴파일시에는 그 존재가 없어도 문제가 없지만 컴파일 후에 실행파일이 실행될 때 로드되어 참조되므로 실행파일이 있는 곳에 두면 된다. 그러므로 솔루션 루트폴더 안에 있는 Debug 폴더나 Release 폴더 안에 FreeImage.dll 파일을 복사해 두기만 하면 된다.
예제 파일(FreeImage/Examples/Generic/ShowMetadata.cpp)을 프로젝트의 소스파일에 포함(Import)한다
ShowMetadata.cpp 파일의 변경/컴파일/실행
ShowMetadata.cpp 파일에는 main()함수가 있는데 커맨드라인 아규먼트로 파일명(이미지파일)을 전달 받아서 해당 파일의 메타데이타를 추출하여 새로운 html 파일을 생성하여 저장하는 기능이 구현되어 있다.
오류 없이 편리하게 테스트하기 위하여 커맨드라인 아규먼트를 사용하지 않고 파일명을 하드코딩하는 방법으로 코드를 약간 변경하였고 EXIF 메타데이타가 아닌 다른 메타데이타에 접근하는 부분에서 오류가 발생하는 것을 확인하여 EXIF 메타데이타만 읽어서 html 파일에 저장하도록 몇줄의 코드를 변경하거나 삭제하였다. 결국 오류 없는 테스트가 되었고 그 결과로 생성된 html 파일을 브라우저로 열어보면 이미지 파일의 모든 EXIF 메타데이타를 확인할 수 있다.
테스트를 위해 변경된 ShowMetadata.cpp 파일을 여기 첨부한다