Php Imagick:Pdf被转换为质量非常差的JPG

时间:2018-05-07 06:30:07

标签: php pdf jpeg imagick

我在我的项目中使用了Imagick扩展。这对我来说是新的。

以下是我的代码。

                $pdfPath = $config['upload_path'] . '/' . $fileName;
                $im = new imagick();
                $im->setResolution(300, 300);
                $im->readImage($pdfPath);
                $im->setImageFormat('jpeg');
                $im->setImageCompression(imagick::COMPRESSION_JPEG); 
                $im->setImageCompressionQuality(100);
                $im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
                $im->clear();
                $im->destroy();

这让我的图像质量很差。 所有文本都转换为黑色背景。图像也显示不正确。 请参见下图,它是从PDF转换而来的。 enter image description here 请帮帮我。

2 个答案:

答案 0 :(得分:3)

您需要将图像背景颜色设置的选项设置为白色。在这里,我添加了$ im-> - > flattenImages(); 在这里,您可以找到解决方案https://www.binarytides.com/convert-pdf-image-imagemagick-php/

permissions

$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

我不确定这对你有帮助。

答案 1 :(得分:1)

我认为问题在于我们从pdf输入每英寸点数的分辨率,并在制作jpeg时将其输出为每英寸像素数。

这个代码可以保证正确的宽高比,而且我可以看出我用来测试的pdf。但它根本不是很清楚,我无法阅读任何文字。这是我用的。

    $pdfPath = $config['upload_path'] . '/' . $fileName;
    $img = new imagick();
    $img->setResolution(300, 300);
    $img->readImage($pdfPath);  //Open after yuo set resolution.
    $img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); //Declare the units for resolution.
    $img->setImageFormat('jpeg');
    $img->setImageCompression(imagick::COMPRESSION_JPEG);
    $img->setImageCompressionQuality(100);
    $img->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
    $img->clear();
    $img->destroy();

根据我的阅读,您可能需要在计算机上安装Ghostscript,并且从命令行执行脚本似乎更受欢迎,并提供更好的结果和性能。

我发现这篇文章看起来它载有一堆图像格式的信息以及imagemagik如何处理它们。它有一些PDF格式。

http://www.imagemagick.org/Usage/formats/#tiff

我可能会查看一个PHP PDF库,其中包含已经内置的所有内容。重新发明轮子毫无意义。可能已经内置了一个函数来完成你想要做的事情。