使用 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
PHP PDF2JPG - 使用ImageMagick将PDF转换为JPG图像