使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量
代码如下:使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量,php,pdf,imagemagick,imagick,printer-control-language,Php,Pdf,Imagemagick,Imagick,Printer Control Language,代码如下: $im=new Imagick(); $im->readImageBlob($pdf_data); $im->setImageFormat('pcl'); $b64pages = array(); for ($x = 1;$x <= $im->getNumberImages(); $x++) { $im->previousImage(); $pclpage = $im->getImageBlob(); $b64page =
$im=new Imagick();
$im->readImageBlob($pdf_data);
$im->setImageFormat('pcl');
$b64pages = array();
for ($x = 1;$x <= $im->getNumberImages(); $x++) {
$im->previousImage();
$pclpage = $im->getImageBlob();
$b64page = base64_encode($pclpage);
$b64pages[] = $b64page;
$count--;
}
$im=new Imagick();
$im->readImageBlob($pdf\U数据);
$im->setImageFormat('pcl');
$b64pages=数组();
对于($x=1;$x getNumberImages();$x++){
$im->previousImage();
$pclpage=$im->getImageBlob();
$b64page=base64_编码($pclpage);
$B64页[]=$B64页;
$count--;
}
当我将生成的PCL图像直接发送到客户端的PCL打印机时,输出是模糊的。当通过windows驱动程序打印时,PDF不会模糊。驱动程序在做什么,我没有做什么,以确保PCL输出是清晰的?好的,所以我找到了一个shell脚本,在这里使用所有正确的参数调用ghostscript:。我在我的服务器上安装了它。现在,我的文件格式转换php代码如下所示:
chdir("../pdf_to_pcl");
$ident = uniqid();
$pdf_filename = $ident.".pdf";
$pdf_file = fopen($pdf_filename,'w+');
fwrite($pdf_file,$pdf_data);
fclose($pdf_file);
exec("./pdf2pcl $pdf_filename");
$pcl_filename = $ident.".pcl";
$pcl_file = fopen($pcl_filename,"r+");
while($dt = fread($pcl_file,4096)) {
$pcl_data .= $dt;
}
fclose($pcl_file);
unlink($pdf_filename);
unlink($pcl_filename);
我正在转换的图像数据是$pdf_数据。pcl格式的数据在$pcl_数据中。我可以打开一个用于PCL打印机的原始打印服务器(端口9100)的套接字,直接向其写入$PCL_数据,它就可以工作了。希望这有帮助。最佳猜测-PDF是文本上的矢量格式,PCL是一个2色(黑色/白色)位图-您需要非常非常非常高的DPI以保持文本清晰,如1200+DPI IIRC。。。这意味着您的PCL需要比原始PDF大得多。Printint使用Windows打印作为向量,该代码正在从页面
$im->getImageBlob()
创建光栅(位图)图像。你正在失去质量。问题应该是“当使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量?”谢谢。修正了这个问题。@CD001,我同意PCL变大,只是当我增加使用$im->setResolution()
的分辨率时,它也会使图像尺寸变小很多,比如$im->setPage()
和$im->setSize()
别帮我的ImageMagick有点生锈,因为我不久前回到了GD库(不太需要处理器),但我认为您需要setResolution()
和resizeImage()
-假设您使用的DPI为1200,PDF为A4大小,则需要执行类似resizeImage()的操作(992014030,imagick::FILTER_LANCZOS,1,true)