/**
* 將pdf文件轉化爲多張png圖片
* @param string $pdf pdf所在路徑 (/www/pdf/abc.pdf pdf所在的絕對路徑)
* @param string $path 新生成圖片所在路徑 (/www/pngs/)
*
* @return array|bool
*/
function pdf2png($pdf, $path)
{
if (!extension_loaded('imagick')) {
return false;
}
if (!file_exists($pdf)) {
return false;
}
$im = new Imagick();
$im->setResolution(120, 120); //設置分辨率 值越大分辨率越高
$im->setCompressionQuality(100);
$im->readImage($pdf);
foreach ($im as $k => $v) {
$v->setImageFormat('png');
$fileName = $path . md5($k . time()) . '.png';
if ($v->writeImage($fileName) == true) {
$return[] = $fileName;
}
}
return $return;
}
/**
* 將pdf轉化爲單一png圖片
* @param string $pdf pdf所在路徑 (/www/pdf/abc.pdf pdf所在的絕對路徑)
* @param string $path 新生成圖片所在路徑 (/www/pngs/)
*
* @throws Exception
*/
function pdf2png2($pdf, $path)
{
try {
$im = new Imagick();
$im->setCompressionQuality(100);
$im->setResolution(120, 120);//設置分辨率 值越大分辨率越高
$im->readImage($pdf);
$canvas = new Imagick();
$imgNum = $im->getNumberImages();
//$canvas->setResolution(120, 120);
foreach ($im as $k => $sub) {
$sub->setImageFormat('png');
//$sub->setResolution(120, 120);
$sub->stripImage();
$sub->trimImage(0);
$width = $sub->getImageWidth() + 10;
$height = $sub->getImageHeight() + 10;
if ($k + 1 == $imgNum) {
$height += 10;
} //最後添加10的height
$canvas->newImage($width, $height, new ImagickPixel('white'));
$canvas->compositeImage($sub, Imagick::COMPOSITE_DEFAULT, 5, 5);
}
$canvas->resetIterator();
$canvas->appendImages(true)->writeImage($path . microtime(true) . '.png');
} catch (Exception $e) {
throw $e;
}
}
PS: 無論是轉化爲多張還是單張圖片,都需要安裝PHP的Imagick擴展。
其實,這兩個方法還可以再優化,比如可以自定義設置圖片的分辨率,存放圖片的地址不存在的時候,可以自動創建目錄之類的。這些問題和轉化圖片,就不多寫了。