如何使用FPDF和PHP来保持图像质量?

我正在使用FPDF与 PHP添加图像到PDF.但是,PDF中的图像质量比原始图像差得多,如下所示:

相关代码

$image_height = 40;
$image_width = 40;
$pdf = new FPDF();
$pdf->AddPage();
$start_x = $pdf->GetX();
$start_y = $pdf->GetY();
$pdf->Image('./images/ds_pexeso_ros_0_17.jpg',$pdf->GetX(),$pdf->GetY(),$image_height,$image_width); 
$pdf->Output("pexeso".date("Y-m-d"),"I");

原始图像是150×150像素.

我在客户的项目中遇到同样的问题.
即使使用图像,也可以在生成的pdf文档中模糊图片.

花了我几个小时,但这对我有用.

我看了一下代码,看到在pdf文档的构造函数中设置了一个比例因子:

//Scale factor
if($unit=='pt')
    $this->k=1;
elseif($unit=='mm')
    $this->k=72/25.4;
elseif($unit=='cm')
    $this->k=72/2.54;
elseif($unit=='in')
    $this->k=72;
else
    $this->Error('Incorrect unit: '.$unit);

比例因子取决于pdf文档的构造函数中给出的值:

function FPDF($orientation='P',$unit='mm',$format='A4')

认值为“mm”.在我的大部分文件中,我发起了一个pdf文件,如:

$pdf = new PDF('P');

这意味着将会使用72 / 25.4 = 2.83的比例因子.
当我使用之前放置一张图像:

$this->Image('path/to/file',0);

这样我就得到了模糊的图像.
也可以在命令中给出图像的宽度

$this->Image('path/to/file',200); // for a image width 200

这给了我一个太大的形象.但是,这里是一个诀窍 – 当你将实际宽度除以scalefactor(在我的情况下是2.83),并将其放在这个语句中,它给出了一个完全清晰的图像:

$this->Image('path/to/file',71); // for a image width 200 / 2.83 = app 71

我希望这也适合你!

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...