我正在使用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");
原始图像为150x150像素。
答案 0 :(得分:9)
我在客户项目中面临同样的问题。 生成的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);
scalefactor取决于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, 0);
这样我就得到了模糊的图像。 也可以在命令
中给出图像的宽度$this->Image('path/to/file', 0, 0, 200); // for a image width 200
这给了我一个太大的图像。但是 - 这就是诀窍 - 当你用scalefactor(在我的情况下是2.83)划分实际宽度时,把它放在这个语句中它会给出一个非常清晰的图像:
$this->Image('path/to/file', 0, 0, 71); // for a image width 200 / 2.83 = app 71
我希望这也适合你!
答案 1 :(得分:0)
我认为问题可能与:
有关 $image_height = 40;
$image_width = 40;
根据这两条说明,您将设置图像在pdf中的尺寸。
但如果原始图像大于40x40,图像缩放会导致质量问题。
所以我建议:
答案 2 :(得分:0)
FPDF使用这样的语句将用户单位设置为mm $ pdf =新FPDF(' P',' mm',' Letter');
<?php
require_once('fpdf.php');
$image_height = 40;
$image_width = 40;
$pdf = new FPDF('P','mm','Letter');
$pdf->AddPage();
$start_x = $pdf->GetX();
$start_y = $pdf->GetY();
$pdf->Image('./images/ds_pexeso_ros_0_17.jpg',$start_x+0,$start_y-2,40);
$pdf->Output("pexeso".date("Y-m-d"),"I");
?>
FPDF取得了非常好看的效果。