使用Imagick和PHP将多页pdf转换为多个JPG图像

使用Imagick和PHP将多页pdf转换为多个JPG图像,php,imagemagick,imagick,Php,Imagemagick,Imagick,我有一个使用Imagick从上传的多页pdf文件($uploadfile)创建jpg图像的小脚本: $imagick = new imagick(); $imagick->setResolution(600, 600); $imagick->readImage($uploadfile); $imagick->setImageFormat('jpg'); $pages = (int)$imagick->getNumberImages(); foreach($imagick

我有一个使用Imagick从上传的多页pdf文件($uploadfile)创建jpg图像的小脚本:

$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();
$im=newimagick($uploadfile);
$pages=$im->getNumberImages();
if($pages<3){$resolution=600;}else{$resolution=floor(sqrt(1000000/$pages));}
$imagick=新的imagick();
$imagick->setResolution($resolution,$resolution);
$imagick->readImage($uploadfile);
$imagick->setImageFormat('jpg');
foreach($imagick as$i=>$imagick){$imagick->writeImage($uploadfile.“.page.”($i+1)。“$pages..jpg”);}
$imagick->clear();

现在它工作得很好

请检查pdf文件的大小,也许它超过了php.ini中的“内存限制”设置

我刚刚用一个5页的pdf尝试了你的代码,结果成功了。您是否尝试过使用不同来源的较长PDF?您确定文件确实在您认为的位置吗?这将是一个PHP文件上载权限问题……您需要检查apache是否正在使用PHP可以读取的权限创建文件。