2012-04-06 11 views
11

PHPでFPDFを使用してPDFに画像を追加しています。しかし、あなたがここに見ることができるようにPDFの画質は、元の画像よりもはるかに悪いです:FPDFとPHPで画質を維持する方法は?

Print screen from web pagePrint screen from 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ピクセルです。

+0

私もこの問題を抱えています。たぶん私は別の方法でそれを求めることができます...画像が100ピクセル×100ピクセルの場合、FPDFの幅と高さは画像スケーリングが起こらないようにするために何を使用するのですか? – Scott

+0

TCPDFは代替手段ですが、おそらくそれを聞きたくありません。しかし、ライブラリに関連していない場合には、品質を比較することができます。 –

答えて

8

私は顧客のためのプロジェクトで同じ問題に直面しました。 採用された画像でも、生成された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 = new PDF('P'); 

これは、72/25.4 = 2.83使用のスケールファクタがあることを意味します。私の文書のほとんどでは私のようなPDF文書を開始します。私はぼやけた画像を得た

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

この方法:私はちょうど使用する前に、私は画像を配置 。 それは、これが私にあまりにも大きかったイメージを与えた

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

コマンドで画像の幅を持たせることも可能です。しかし - と、ここでのトリック来る - あなたは(私の場合2.83で)スケールファクタによって、実際の幅を分割し、この文でこれを置くとき、それは完全に鮮明な画像が得られます。

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

私は、これはあまりにもあなたのために働くの希望が!

0

私はこの問題は、に関連している可能性が考えて:あなたは、画像をPDFになります寸法を設定しているこれらの2つの命令で

$image_height = 40; 
$image_width = 40; 

元の画像が40x40より大きい場合、画像のスケーリングは品質上の問題を引き起こす可能性があります。

それでは、私はお勧め:

  • 画像の正しいサイズ変更を行います(PHPがGDライブラリを提供します)。 40x40にサイズ変更してください。 imagecopyresampledされたGD関数は、あなたの友人です:イメージのサイズを変更して再サンプリングしてください!完全なリファレンス:PDFで今http://www.php.net/manual/en/function.imagecopyresampled.php
  • 挿入画像
+0

ありがとうございました。実際には、元の幅と高さ(150x150ピクセル)を維持したいと考えています。 $ image_heightと$ image_widthの値私は元の幅と高さを維持するために設定する必要がありますか? – chejnik

+0

もしあなたのpdfファイルに画像150x150を入れたいなら、あなたのファイルの最初の2行を変更してください:$ image_height = 150; $ image_width = 150; –

+0

fdpfで使用されるユニットは私には分かりません。マニュアルの中で言われているように、例えば、幅 - ページ内の画像の幅。 値が正の場合、ユーザー単位の幅を表します。 値が負の場合、絶対値はdpiでの水平解像度を表します。 値が指定されていないか、ゼロに等しい場合、それは自動的に計算される。私はどのようにピクセル単位で自分のユーザー単位を設定するか、画像を拡大縮小しないようにするためにどの解像度を使うべきかわかりません。 Tx。 – chejnik

0

FPDFのように、ユーザー単位をmmに設定します。 $ pdf = new 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は非常に良好な結果を出しました。

関連する問題