如何创建质量更好的图像,使用Imagick / PHP将.pdf转换为.jpg?

时间:2013-11-27 00:33:49

标签: php pdf imagick

我目前有一页PDF(http://reljac.com/so_1/all.pdf),它是几张纸质收据的基本扫描件。如果你看PDF,文字清晰易读。原件是扫描8.5“x 11”纸(无所谓)

我创建了一个非常简单的文件,使用以下代码将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;
?>

当我运行它(http://reljac.com/so_1/pdf_jpg.php)时,生成的图像难以辨认。

我现在正在使用两台服务器,一位告诉我:

  

版本:ImageMagick 6.2.8 10/06/10 Q16   文件:/usr/share/ImageMagick-6.2.8/doc/index.html

另一个:

  

版本:ImageMagick 6.6.0-4 2012-05-02 Q16 http://www.imagemagick.org

两台服务器都创建了类似的质量.jpg

我已经更改了几个设置,包括:

我尝试添加$im->scaleImage(600,0);

似乎没有什么比这更清晰了。我希望最终结果是原始PDF的清晰.jpg - 它不必填满屏幕,它只需要清晰易读。原始PDF可能有不同的大小,因此我需要记住,源并不总是8.5“x 11”。

我还能做些什么来提高最终图像的质量,还是我应该期待的最好的?我是否需要以其他方式处理这些文件以获得更好的图像?

更新 根据@ VadimR的回答,我现在使用以下内容:

$src = 'all.pdf';
$src_parts = pathinfo($src);

shell_exec('pdfimages ' . $src . ' ' . $src_parts['filename']);
shell_exec('convert ' . $src_parts['filename'] . '-000.pbm -resize 25% -sharpen -2 ' . $src_parts['filename'] . '.jpg');

$myImage = imagecreatefromjpeg($src_parts['filename'] . '.jpg');
header("Content-type: image/jpeg");
imagejpeg($myImage);
imagedestroy($myImage);

shell_exec('rm ' . $src_parts['filename'] . '-000.pbm');

这会产生一个漂亮,清晰的图像。

2 个答案:

答案 0 :(得分:2)

ImageMagick将PDF渲染委托给Ghostscript,因此,如果需要,不仅可以指定IM,还可以指定GS版本。其次,我认为最好从命令行开始,只有在达到适当的质量后才能将其放入php代码中。

提供质量(或多或少)的命令:

convert -density 300 all.pdf out.jpg

这里我们设置渲染分辨率300 dpi。注意,它与

不一样
convert all.pdf -density 300 out.jpg

因为此处的渲染速度为72 dpi,因此使用300 dpi分配质量差的结果(即不进行重新采样)。

但是,我认为更好的方法是提取扫描按原样,即不进行转换:

pdfimages all.pdf all

给出全000.pbm图像 - 每个样本1位,3424 * 4400像素。我绝对不能同意,“文字清晰易读” - 有些数字只能被猜到。

然后使用convert命令重新取样,并尝试改进,例如

convert all-000.pbm -resize 25% -sharpen 2 out.jpg

答案 1 :(得分:-1)

使用 pdfimages 提取扫描页面的图像(是的,它可以从单个PDF文档中提取100张图像中的100张)并将其保存为pbm或ppm文件是一个更好的选择或技术

&#34;如果您不知道自己在做什么,那么其他所有操作和/或重复转换等都可以/绝对可以降低原创性,有时甚至可以降低图像的质量,图片。例如,有人建议使用JPEG格式,确实是一种松散的压缩/编码方法。然而,原始图像格式如pbm或mono用于灰度,黑色和黑色。 24/16/8位彩色图像的白色和/或1位图像和ppm。&#34;

仅对原始图像进行操作,最后使用Jbig2enc将pbm图像转换为PDF文件,使用leptocica的converttopdf实用程序转换为彩色页面。

不要使用调整大小来减少输出页面/ PDF文件的大小,学会使用更好的压缩和/或编码技术!