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

我在扯头发。

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

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

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

$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 的大小,但是如果大小合适的话,它的质量真的很差。

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

【问题讨论】:

    标签: php pdf image-processing imagemagick imagick


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多