2017-08-16 251 views
0

我有一個小腳本多個JPG圖片從上傳的多頁PDF文件($ uploadfile)與Imagick創建JPG圖片:解決:轉換一個多頁的PDF與Imagick和PHP

$imagick = new imagick(); 
$imagick->setResolution(600, 600); 
$imagick->readImage($uploadfile); 
$imagick->setImageFormat('jpg'); 
$pages = (int)$imagick->getNumberImages(); 
foreach($imagick as $i=>$imagick) { 
    $imagick->writeImage($uploadfile. " page ". ($i+1) ." of ". $pages.".jpg"); 
} 
$imagick->clear(); 
unlink ($uploadfile); 

這對於一個1或2分頁PDF文件工作正常,但給出了一個錯誤與3個或更多頁:

[lsapi:error] Backend fatal error: PHP Fatal error: Uncaught exception 'ImagickException' with message 'Failed to read the file' in /index.php:152\nStack trace:\n#0 /index.php(152): Imagick->readimage('...')\n#1 {main}\n thrown in /index.php on line 152\n 

152在錯誤日誌中提到的線路是:

$imagick->readImage($uploadfile); 

預先感謝您!


已解決。這是一個記憶問題。我將代碼更改爲:

$im = new imagick($uploadfile); 
$pages = $im->getNumberImages(); 
if ($pages < 3) { $resolution = 600; } else { $resolution = floor(sqrt(1000000/$pages)); } 
$imagick = new imagick(); 
$imagick->setResolution($resolution, $resolution); 
$imagick->readImage($uploadfile); 
$imagick->setImageFormat('jpg'); 
foreach($imagick as $i=>$imagick) { $imagick->writeImage($uploadfile. " page ". ($i+1) ." of ". $pages.".jpg"); } 
$imagick->clear(); 

現在它工作的很棒!

+0

我只是想你的代碼有5頁PDF和它的工作。你有沒有用不同來源的更長的PDF來試用它?你確定這個文件實際上是你認爲的嗎? –

+0

這將是一個PHP文件上傳權限問題....您需要檢查apache是​​否使用PHP可以讀取的權限創建文件。 – Danack

回答

1

請檢查PDF文件的大小,也許,它超過「memory_limit的」在php.ini中設置