在服务器中处理时,DOMPDF图像的质量很差

时间:2015-08-04 12:48:09

标签: php pdf image-processing dompdf

我正在一个网站上使用不同的jQuery表单输出到html结果页面,这个html转换为带有DOMPDF库的pdf文件。当在本地进行转换时,没有问题,但是当它在服务器中发生时,生成的pdf图像的质量低于原始图像,带有白色划痕和模糊(如果需要,我可以上传示例)。

做了一些研究,我尝试了以下解决方案:
- 尝试了不同的图像格式(jpg,png,gif)
- 尝试了“DOMPDF_PDF_BACKEND”的不同值(渲染后端使用)(CPDF,PDFLib,GD)
- 尝试了不同的“DOMPDF_DPI”值
- “DOMPDF_ENABLE_REMOTE”值设置为“true”
- 尝试用不同的应用程序打开生成的pdf(ubuntu pdf viewer,adobe acrobat pdf,gimp,photoshop)

都具有相同的结果。

还在本地和服务器上查看了phpinfo():

PHP版本
local:PHP Version 5.5.11
服务器:PHP版本5.3.29

GD版:
两者:捆绑(2.1.0兼容)

GD FreeType版本:
当地:2.4.8
版本:2.4.9

libPNG版本:
当地:1.5.9
服务器:1.2.49


我不知道要比较的其他参数。

我不知道还有什么可以尝试。

提前致谢。

1 个答案:

答案 0 :(得分:0)

感谢anwswer,我昨天看到那篇文章,我曾尝试过不同的图像格式,但我还在等待使用这些库。

最后,评论关于想象图像处理的代码" //使用PECL imagick + ImageMagic来处理透明的PNG图像"解决了这个问题,这是由于包含透明度(alpha)的图像,如png和gif。

// Use PECL imagick + ImageMagic to process transparent PNG images
}elseif (extension_loaded("imagick")) {
  $imagick = new Imagick($file);
  $imagick->setFormat('png');

  // Get opacity channel (negative of alpha channel)
  $alpha_channel = clone $imagick;
  $alpha_channel->separateImageChannel(Imagick::CHANNEL_ALPHA);
  $alpha_channel->negateImage(true);
  $alpha_channel->writeImage($tempfile_alpha);

  // Cast to 8bit+palette
  $imgalpha_ = imagecreatefrompng($tempfile_alpha);
  imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
  imagedestroy($imgalpha_);
  imagepng($imgalpha, $tempfile_alpha);

  // Make opaque image
  $color_channels = new Imagick();
  $color_channels->newImage($wpx, $hpx, "#FFFFFF", "png");
  $color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYRED, 0, 0);
  $color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYGREEN, 0, 0);
  $color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYBLUE, 0, 0);
  $color_channels->writeImage($tempfile_plain);

  $imgplain = imagecreatefrompng($tempfile_plain);

}

然后它将使用"} else {"提取没有Alpha通道的图像的选项。

您还可以在php.ini

中禁用imagick模块