我有一个关于> 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');
}
如何更正文件质量?
答案 0 :(得分:2)
PDF是基于矢量而不是位图,因此您需要在读取文件之前设置密度,以便告诉ImageMagick您将需要什么样的大小,然后它可以根据输入进行相应的栅格化。首先尝试以下内容来阅读图像:
$im->setResolution(288,288);
然后尝试减少该值,比如144,然后比较质量直到你有足够的质量。这是质量与处理时间和内存需求之间的权衡。数字越高,质量越高,但记忆越长,记忆越多。
答案 1 :(得分:0)
通过补偿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);