PHP pdf轉化為圖片(PNG)
阿新 • • 發佈:2018-12-26
/** * 將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擴充套件。
其實,這兩個方法還可以再優化,比如可以自定義設定圖片的解析度,存放圖片的地址不存在的時候,可以自動建立目錄之類的。這些問題和轉化圖片,就不多寫了。