Converting a multi-page pdf to multiple JPG images with Imagick and PHP

Viewed 3879

I have a small script for creating jpg images from an uploaded multi-paged pdf file ($uploadfile) with Imagick:

$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);

This works fine for a 1 or 2 paged pdf-document, but gives an error with 3 or more pages:

[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

Line 152 mentioned in the error log is:

$imagick->readImage($uploadfile);

Solved.

It was a memory problem. I changed the code to:

$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();

And now it works great!

1 Answers
Related