如何使用Imagick/PHP将.pdf转换为.jpg创建质量更好的图像?
我目前有一个单页PDF(),它是几个纸质收据的基本扫描。如果你看PDF,文本清晰易读。原件是一张8.5英寸x11英寸的纸的扫描(应该没关系) 我创建了一个非常简单的文件,使用以下代码将PDF转换为.jpg:如何使用Imagick/PHP将.pdf转换为.jpg创建质量更好的图像?,php,pdf,imagick,Php,Pdf,Imagick,我目前有一个单页PDF(),它是几个纸质收据的基本扫描。如果你看PDF,文本清晰易读。原件是一张8.5英寸x11英寸的纸的扫描(应该没关系) 我创建了一个非常简单的文件,使用以下代码将PDF转换为.jpg: <?php $im = new imagick('all.pdf[0]'); $im->setImageFormat('jpg'); $im->setImageCompression(imagick::COMPRESSION_LOSSLES
<?php
$im = new imagick('all.pdf[0]');
$im->setImageFormat('jpg');
$im->setImageCompression(imagick::COMPRESSION_LOSSLESSJPEG);
$im->setImageCompressionQuality(80);
header('Content-Type: image/jpeg');
echo $im;
?>
这将产生一个清晰的图像。ImageMagick将PDF渲染委托给Ghostscript,因此,对于疑难解答,不仅要指定IM,还需要指定GS版本(如有必要)。其次,我认为最好从命令行开始,只有在达到适当的质量后,才能将其放入php代码中 提供质量(或多或少)的命令: 这里我们设置渲染分辨率为300 dpi。注意,这与
convert all.pdf -density 300 out.jpg
因为这里的渲染速度为72 dpi,所以会以300 dpi指定质量差的结果(即,w/o重采样)
但是,我认为更好的方法是按原样提取扫描,即不进行转换:
pdfimages all.pdf all
这就得到了all-000.pbm图像——每个样本1位,3424*4400像素。我绝对不能同意“文本清晰易读”——有些数字只能猜测
然后使用convert
命令重新采样,并可能尝试改进,例如
convert all-000.pbm -resize 25% -sharpen 2 out.jpg
使用pdfimages提取扫描页面的图像(是的,它可以从单个PDF文档中提取100到1000的图像),并将其保存为pbm或ppm文件是一种更好的选择或技术 “如果你不知道你在用这些图像做什么,那么每一次其他的操作和重复转换等肯定会/可能会降低原创性,有时甚至会降低图像的质量。例如,有人建议使用JPEG格式,这确实是一种愚蠢的压缩/编码方法。然而,原始图像格式如pbm或mono用于灰度、黑白和/或1位图像,ppm用于24/16/8位彩色图像。” 仅对原始图像进行操作,最后使用Jbig2enc将pbm图像转换为PDF文件,并使用leptocica的converttopdf实用程序对彩色页面进行转换
永远不要使用“调整大小”来减小输出页面/PDF文件的大小,学会使用更好的压缩和/或编码技术!您的问题……这是否仅适用于仅为图像的PDF文件?如果文件是通过将文档另存为PDF创建的,这会不会不起作用?@Jason,使用
pdfimages
进行转换如果一个页面恰好是一个图像,则该页面可以工作。否则,使用Ghostscript或其他工具(包括IM的convert
(使用GS)将PDF呈现为图像。
pdfimages all.pdf all
convert all-000.pbm -resize 25% -sharpen 2 out.jpg