【问题标题】:Imagemagick PDF tp JPG bad quality PHPImagemagick PDF to JPG 质量差 PHP
【发布时间】:2015-01-16 00:34:53
【问题描述】:

我有一个大约 >100mb 的大 pdf 文件。

我想将那个 pdf 页面逐页保存为 jpg。

我的 php 脚本运行良好,但即使将 quailty 设置为 100,图像质量也很差。JPG 输出最大宽度设置为 1024。

每个文件大小约 2.5mb。我已经搜索过这个问题,但我每次都得到有关命令行解决方案的信息。我必须使用 php。

$file = 'e-magazine/1/ebook.pdf';

if($file === null && !file_exists($file)) {
    throw new \Exception('FILE NOT EXISTS');
}

$nop = new \Imagick($file);

for($i = 0; $i <= $nop->getnumberimages(); $i++) {
    $image_file = 'e-magazine/1/'.($i+1).'.jpg';

    $im = new \Imagick();

    $im->readimage($file.'['.$i.']');
    $im->setImageCompressionQuality(100);
    $im->setimageformat('jpeg');
    $im->resizeImage(1024, 0, \Imagick::FILTER_CATROM, 1);
    $im->writeimage($image_file);

    $tm = new \Imagick();
    $tm->readimage($image_file);
    $tm->setImageCompressionQuality(60);
    $tm->setimageformat('jpeg');
    $tm->resizeImage(200, 0, \Imagick::FILTER_CATROM, 1);
    $tm->writeimage('e-magazine/1/thumbnails/'.($i+1).'_thumb.jpg');
}

如何纠正文件质量?

【问题讨论】:

  • 你能给出一些 pdf 中的示例页面和你得到的输出吗?
  • 请帮助在尝试您的代码时遇到错误 UnableToOpenBlob 'sample.pdf': No such file or directory @error/blob.c/OpenBlob/3315

标签: php pdf imagemagick jpeg imagick


【解决方案1】:

PDF 是基于矢量而不是位图的,因此您需要在读取文件之前设置密度,以便告诉 ImageMagick 您需要什么样的大小,然后它可以在输入时进行相应的光栅化。在读取图像之前尝试以下操作:

$im->setResolution(288,288);

然后尝试降低该值,例如 144,然后比较质量,直到您有足够的质量。这是质量与处理时间和内存需求的权衡。数字越高,质量越高,但时间越长,内存越多。

【讨论】:

  • 请帮助在尝试有问题​​的代码时遇到错误 UnableToOpenBlob 'sample.pdf': No such file or directory @error/blob.c/OpenBlob/3315
【解决方案2】:

我对这个问题的完整解决方案是对 PNG 透明度 alpha 通道进行补偿

$im = new imagick();
$im->setResolution(300, 300);
$im->readimage($pdf_path.'_0.pdf[0]');
$im->setImageResolution(300, 300);
$im->setImageBackgroundColor('#ffffff');
$im = $im->flattenImages();
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->resizeImage(1200, 0,  imagick::FILTER_LANCZOS, 1);

【讨论】:

  • 请帮助在尝试有问题​​的代码时遇到错误 UnableToOpenBlob 'sample.pdf': No such file or directory @error/blob.c/OpenBlob/3315
猜你喜欢
  • 1970-01-01
  • 2013-02-20
  • 2018-10-16
  • 2013-03-24
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2020-11-11
  • 2014-10-29
相关资源
最近更新 更多