使用 PHP 和 ImageMagick 将 PDF 转换为高质量的 JPG

Posted

技术标签:

【中文标题】使用 PHP 和 ImageMagick 将 PDF 转换为高质量的 JPG【英文标题】:Convert PDF to high quality JPG using PHP and ImageMagick 【发布时间】:2013-02-20 16:36:17 【问题描述】:

我在扯头发。

我有一个 300 DPI PDF,我想将其转换为 300 DPI JPG,即 2550x3300。我被告知 ImageMagick 可以做到这一点,所以我让 ImageMagick 工作,但它只返回一个大小约为原始 PDF 大小 1/5 的 JPG。

这不是源图像——我已经用几个高质量的 PDF 完成了它,它们都有同样的问题。

在搜索 *** 的想法之后,这是我想出的使用方法:

$im = new imagick($srcimg);
$im->setImageResolution(2550,3300);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($targetimg);
$im->clear();
$im->destroy();

但还是不行。

我也尝试过使用 $img->resizeImage() 来调整 JPG 的大小,但是如果大小合适的话,它的质量真的很差。

完全被难住了。感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要在读取图像之前设置分辨率。请see this comment on the manual - 看看这是否可行。

【讨论】:

如果我把 setImageResolution 放在第一位,这个类还没有被声明。如果我执行 $im = new imagick(),然后是 $im->setImageResolution,然后是 $im->readImage($srcimg),我会收到此错误:致命错误:未捕获的异常 'ImagickException' 并带有消息'无法处理空的 Imagick对象'在... 尝试在空对象上使用$im->setResolution()(参见手册中Imagick::setResolution的nots) 是的——只是这样做了,我让它工作了,虽然只需要 300,300。诀窍是切换顺序并使用 setResolution 而不是 setImageResolution。谢谢! 这太对了,谢谢。大家重复一遍:在读入图像之前先设置分辨率。另外,使用setResolution之类的方法,不要使用setImageResolution,否则会出错。这让我大吃一惊。【参考方案2】:

这是正确的方法,质量会提高。

$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($srcimg);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($targetimg);
$im->clear();
$im->destroy();

【讨论】:

以上是关于使用 PHP 和 ImageMagick 将 PDF 转换为高质量的 JPG的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick/Imagick 使用原生 PHP API 将 PDF 转换为 JPG

如何将命令 imagemagick 转换为 php 代码?

PHP PDF2JPG - 使用ImageMagick将PDF转换为JPG图像

PHP ImageMagick 将大图像拆分为图块

CENTOS 7+PHP7使用imagemagick 将webp格式图片转换为jpeg格式

PHP使用ImageMagick操作gif图