DOMPDF 图像在服务器中处理时质量较差
DOMPDF images have poor quality when processing in server
我正在一个网站上工作,该网站具有不同的 jQuery 形式,输出到 html 结果页面,此 html 使用 DOMPDF 库转换为 pdf 文件。在本地转换时没有问题,但是在服务器上转换时,生成的pdf图像质量比原始图像低,有白色划痕和模糊(如果需要,我可以上传示例)。
经过一些研究,我尝试了以下解决方案:
- 尝试了不同的图像格式(jpg、png、gif)
- 尝试了 "DOMPDF_PDF_BACKEND" 的不同值(要使用的渲染后端)(CPDF、PDFLib、GD)
- 尝试了不同的 "DOMPDF_DPI" 值
- "DOMPDF_ENABLE_REMOTE" 值设置为 "true"
- 尝试使用不同的应用程序打开生成的 pdf(ubuntu pdf 查看器、adobe acrobat pdf、gimp、photoshop)
结果都一样。
还查看了本地和服务器中的 phpinfo():
PHP版本
本地:PHP 版本 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
我不知道还有什么参数可以比较。
我不知道还能尝试什么。
提前致谢。
感谢您的回答,我昨天看到 post,我尝试了不同的图像格式,但我一直在等待使用库。
最后,注释掉有关imagick图像处理的代码“//使用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 模块
我正在一个网站上工作,该网站具有不同的 jQuery 形式,输出到 html 结果页面,此 html 使用 DOMPDF 库转换为 pdf 文件。在本地转换时没有问题,但是在服务器上转换时,生成的pdf图像质量比原始图像低,有白色划痕和模糊(如果需要,我可以上传示例)。
经过一些研究,我尝试了以下解决方案:
- 尝试了不同的图像格式(jpg、png、gif)
- 尝试了 "DOMPDF_PDF_BACKEND" 的不同值(要使用的渲染后端)(CPDF、PDFLib、GD)
- 尝试了不同的 "DOMPDF_DPI" 值
- "DOMPDF_ENABLE_REMOTE" 值设置为 "true"
- 尝试使用不同的应用程序打开生成的 pdf(ubuntu pdf 查看器、adobe acrobat pdf、gimp、photoshop)
结果都一样。
还查看了本地和服务器中的 phpinfo():
PHP版本
本地:PHP 版本 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
我不知道还有什么参数可以比较。
我不知道还能尝试什么。
提前致谢。
感谢您的回答,我昨天看到 post,我尝试了不同的图像格式,但我一直在等待使用库。
最后,注释掉有关imagick图像处理的代码“//使用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 模块