2023. 7. 10. 09:13

PHP에서 PDF 파일의 첫 페이지를 읽어 이미지로 저장하기

php의 imagick 라이브러리가 설치 되어 있어야 함

php의 imagick 라이브러리 설치 방법(windows xampp 기준)

(참고 URL : https://www.php.net/manual/en/imagick.installation.php )

1. https://windows.php.net/downloads/pecl/releases/imagick/ 사이트에서 버전에 맞는 dll 파일을 다운 받음

2. 다운 받은 압축파일의 php_imagick.dll 파일을 xampp\php\ext 폴더 안에 복사해 넣음

3. php.ini 파일에  extension=imagick 라인 추가

4. 1번에서 다운 받은 압축파일에 있는 IM_MOD_XXX.dll 파일과 CORE_RL_XXX.dll 파일을 xampp\apache\bin 경로에 넣어놓음

5. 아파치 재시작

6. phpinfo() 로 봤을 때 아래와 같은 내용이 나와야 함(특히 supported formats 중요!!)
7. 참고로 ghostscript windows버전이 설치가 되어 있고 path에 등록되어 있어야 함(내부적으로 사용하는 듯), path에 등록된 실행파일명을 gs.exe로 하여야 함!!! (이렇게 안하면 아래 함수가 동작하지 않음)

 

PHP로 PDF 파일을 읽어 첫 페이지를 jpeg로 만드는 함수

function saveFirstPDFPageAsImage($file_name)
{
	$img = new imagick();
    // 아래 설정은 readImage 이전에 설정해야 정상동작함
	$img->setResolution(180, 180);
	$img->setCompressionQuality(80);

    // PDF파일 경로가 안맞는 경우가 많으니 이 부분은 주의
    // 파일명 뒤에 [0] 을 붙이면 첫 페이지를 나타냄
	$img->readImage(realpath($file_name) . '[0]');

    // 확장자를 안 떼고 뒤에 .jpg만 붙여 넣음(편의를 위해서 이렇게 함)
    // 파일명이 test.pdf 인경우 결과 파일은 test.pdf.jpg임
	$img->setImageFormat('jpeg');
	$img->writeImage(realpath($file_name) . '.jpg');
	$img->destroy();
}

 

1. setResolution 과 setCompressionQuality는 적절히 조절(저 정도면 A4를 썸네일 이미지로 보여주는데 큰 문제는 없었음)

2. setImageFormat('png') 로 하면 png파일도 생성 가능, png로 생성하면 자동으로 배경이 투명화 처리 됨

3. 메모리 관리를 위해서 destory()를 호출하는 것을 잊으면 안됨