Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Imagick/PHP将.pdf转换为.jpg创建质量更好的图像?_Php_Pdf_Imagick - Fatal编程技术网

如何使用Imagick/PHP将.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

我目前有一个单页PDF(),它是几个纸质收据的基本扫描。如果你看PDF,文本清晰易读。原件是一张8.5英寸x11英寸的纸的扫描(应该没关系)

我创建了一个非常简单的文件,使用以下代码将PDF转换为.jpg:

<?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