
[英]how do i set the image to high quality when converting to PCL using PHP Imagick (ImageMagick)
[英]How do I create a better quality image converting a .pdf to a .jpg with Imagick/PHP?
我目前有一个单页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->setImageCompressionQuality(40);
$im->setImageCompressionQuality(100);
$im->setImageCompressionQuality(80);
$im->setImageCompression(imagick::COMPRESSION_JPEG);
(各种其他人来自http://www.php.net/manual/en/imagick.constants.php ) 我试过添加$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');
这会产生一个漂亮,清晰的图像。
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
使用pdfimages提取扫描页面的图像(是的,它可以从单个PDF文档中提取100个图像中的100个)并将其保存为pbm或ppm文件是一个更好的选择或技术。
“如果你不知道你正在用它们做什么,那么每一个其他的操作和/或重复的转换等都会/可以肯定地降低原创性,有时甚至可以降低图像的质量。例如有人建议使用JPEG格式确实是一种松散的压缩/编码方法。然而,原始图像格式如pbm或单色用于灰度,黑白和/或1位图像和ppm用于24/16/8位彩色图像。“
仅在原始图像上操作,最后使用Jbig2enc将pbm图像转换为PDF文件,使用leptocica的converttopdf实用程序转换为彩色页面。
不要使用调整大小来减少输出页面/ PDF文件的大小,学习使用更好的压缩和/或编码技术!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.