我有一个小脚本用于使用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();
现在效果很好!
答案 0 :(得分:1)
请检查pdf文件的大小,或许超过&#34; memory_limit&#34;在php.ini中设置