使用ImageMagick将PDF转换为图像

时间:2012-06-22 15:35:47

标签: php imagemagick

我想通过PHP将下载的pdf文件转换为图像。为此,我正在使用Imagemagick扩展PHP。问题是,如果我通过file_get_contents函数下载pdf文件,我无法使用此下载内容创建Imagemagic对象。这是代码:

<?php

$url = "pdf webaddress";
$pdfData = file_get_contents($url);

try
    {

        $img = new Imagick($pdfData);
        $img->setResolution(480,640);
        $img->setImageFormat("jpeg");
        $img->writeImage("test.jpeg");  

    }
catch(Exception $e)
{
    echo $e->getMessage();
}
?>

我收到以下错误:

  

无法读取文件:%PDF-1.6%גדֿ:7 0 obj&lt;&gt; endobj 86 0 obj&lt;&gt; / Filter / FlateDecode / ID [] / Index [7 146] / Info 6 0 R / Length 257 / Prev 592751 / Root 8 0 R / Size 153 / Type / XRef / W [1 3 1]&gt;&gt;流h bbd`bׁ'6'9DעƒH

现在,如果我读入本地存储的pdf文件,一切正常。代码是:

 $image = "output.png";
 $img = new Imagick("path to pdf file");
 $img->setResolution(480,640);
 $img->setImageFormat("jpeg");
 $img->writeImage("test.jpeg"); 

任何建议,帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

ImageMagick PHP extension documentation page开始,Imagick构造函数需要文件名参数,这些参数可以是本地文件一个URL。 :

  

路径可以包含文件名的通配符,也可以是URL。

你应该直接传递URL,没有file_get_contents,PHP文件流非常强大。

另一种解决方案是将文件存储在本地(请参阅tempnam()file_put_contents),但如果您不将其用于除将图像转换为图像之外的其他任何内容,那么它将毫无用处:

$pdfUrl = "...";
$tmpFileName = tempnam(sys_get_temp_dir(), "pdf");
file_put_contents($tmpFileName, file_get_contents($pdfUrl));
// Do your ImageMagick job
unlink($tmpFileName);
相关问题