Php Imagick:Pdf 被转换为 JPG,质量很差

Php Imagick : Pdf are converted into JPG with Very bad quality

我在我的一个项目中使用 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 转换而来的。 请帮助我。

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

来自

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

$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);
// -flatten option, this is necessary for images with transparency, it will produce white background for transparent regions
$im = $im->flattenImages();
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

我不确定它是否对你有帮助。

我认为问题在于我们从 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 库,它已经内置了所有内容。重新发明轮子没有意义。可能已经内置了一个功能来完全按照您的意愿执行操作。