2013-02-13 71 views
1

我需要将多页PDF转换为将在浏览器中显示的一系列PNG。imagick error将pdf转换为png:Postscript委托失败`/ tmp/magick-bpkD9zy7':@ error/pdf.c/ReadPDFImage/663

此代码:

$images = new imagick(); 
$images->readimage($_FILES['upload']['tmp_name']); 
$images->setformat('png'); 

    foreach ($images as $pageNumber => $image) { 
     //Save individual images 
    } 

但它产生的这种质量较差,他们几乎是不可读的PNG图像。

此代码:

$images = new imagick(); 
$images->setresolution(1024,0); 
$images->readimage($_FILES['upload']['tmp_name']); 
$images->setformat('png'); 

    foreach ($images as $pageNumber => $image) { 
     //Save individual images 
    } 

生成在readimage以下错误():

Postscript delegate failed `/tmp/magick-bpkD9zy7': @ error/pdf.c/ReadPDFImage/663 

我需要能够栅格化PDF在比imagick默认更高的分辨率,以获得良好的足够的质量能够读取PNG。任何帮助将不胜感激。

编辑 - 下面是解 - 由于SITES DONE RIGHT

$images = new imagick(); 
$images->setimageunits(RESOLUTION_PIXELSPERINCH); 
$images->setresolution(150,150); 
$images->readimage($_FILES['upload']['tmp_name']); 
$images->setformat('png'); 

    foreach ($images as $pageNumber => $image) { 
     //Save individual images 
    } 

回答

0

使用

$images->setresolution 

设置图像的密度。而不是尝试1024,0(这将像使用转换密度1024x0),尝试将密度设置为200x200。

然后使用http://php.net/manual/en/imagick.setimageunits.php

$images->setImageUnits 

来设置分辨率(以类似 “PixelsPerInch”)的单位。这应该适当地设置图像的清晰度。

+0

这是我写的用于我的项目之一将PDF转换为一组图像的命令。 'convert -colorspace rgb -units PixelsPerInch -density 200x200 -resize 768x1024 -quality 90 my_pdf_file.pdf my_images_output.jpg''我想如果你使用exec函数,它可以像PHP那样运行。另外请注意,正如你所看到的,我正在创建JPG,因此对于PNG,它将不得不进行一些修改! – 2013-02-13 21:29:56

+0

我欣赏这个建议,但我无法使用它。我遇到的问题是,如果在阅读PDF之前设置了_any_参数,我会得到上述错误。 – 2013-02-14 14:34:16

+1

网站已完成 - 我明白您的意思了!我将PixelsPerInch设置为1024,这导致我在临时目录中耗尽空间。 – 2013-02-14 14:50:00