web-dev-qa-db-ja.com

TCPDFエラー:イメージのサイズを取得できません

TCPDFを使用して、動的に生成されたpdfファイルを作成しています。私のpdfファイルでは、ユーザー入力に基づいて画像が生成されます。その画像をpdfファイルに追加します。ここに私のコードがあります

 $map_image = "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=";

$pdf->Image ($map_image, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=」を貼り付けると私のURLは、私が望んでいたように画像を作成しますが、このURLを置くと、機能しません。 という画像のサイズを取得できません

しかし、私はこのようなものを入れた場合

$map_image = '/wp-content/themes/v3/resources/images/public/logo_side.jpg';

その画像を使用してpdfを正常に生成できます。

どうすれば解決できますか?

私は次のstackoverflowリンクを訪問しましたが、これのどれも助けになりませんでした

tcpdfはlocalhostで機能しているが、サーバーでは機能せず、エラーTCPDF ERROR:[Image] Unable to get image:

cakephp tcpdf画像エラー[画像]画像を取得できません

TCPDFエラー:[画像]画像を取得できません

11

これは、 filesize()stat()HTTP wrapper を介したリモートイメージファイルの失敗が原因である可能性があります。 (ラッパーがサポートしていないため)。

TCPDF image()method documentation によると、@記号を前に付けることで、画像データを直接渡すことができます。したがって、生の画像データを取得して、次のようにTCPDFに渡すことができます。

$img = file_get_contents('http://example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=');

$pdf->Image('@' . $img, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

私はこれをテストしていないことに注意してください(TCPDFのドキュメントはまばらです)ので、正しく動作させるために少し実験する必要があるかもしれません。


編集:

これは完全に機能する例です(私のPC上)。これを使用して、画像を正常に取得し、ブラウザにPDFを出力できます。もちろん、画像の既知の有効なパスを設定する必要があります!

<?php

require './tcpdf/tcpdf.php';

$pdf = new TCPDF();

$pdf->AddPage();

$img = file_get_contents('http://path/to/your.jpg');
$pdf->Image('@' . $img);

$pdf->Output();

?>
13
timclutton

サーバーがPHPの file_get_contents または cURL はファイルをダウンロードします。 「イメージのサイズを取得できません」は、サーバー上のこれらの関数の両方がファイルにアクセスできない場合にTCPDFがスローするImage関数の最初のエラーです。

4
Sean Fahey

この問題をデバッグするには、tcpdf.phpの6850行目で@getimagesize($ file)から@を削除します。[Image]を検索して、画像のサイズを取得できません:いくつかの行をスクロールアップします。 @は、実際のエラーメッセージを非表示にします。

ブラウザから画像のURLにアクセスできる場合、システムがURLを要求されたホストにポイントしていない可能性があります。関連するメッセージはgetimagesize():php_network_getaddresses:getaddrinfo failed:です。つまり、ローカルのphp設定には、URLを検索する場所がわからないということです。その場合、/ etc/hostsファイルを変更し、ローカルセットアップでurls ipを指定する必要があります。多くの場合、これはローカルホスト設定の問題です。

例えば。 127.0.0.1 yoururlhere.local

3
Mathias Methner

Magentoストアでこのエラーが発生しました。

tcpdf.phpを開くと、このコードが見つかります。$ fileは、ファイルへのパスを示す必要があるときにURLでした。

// check if is a local file
if (!@file_exists($file)) {
        // try to encode spaces on filename
        $tfile = str_replace(' ', '%20', $file);

簡単な修正のために、このコードを追加しました:

$file = str_replace("http://theurliwantgone/","",$tfile);

そしてそれは働いた!これがあなたのほとんどに役立つことを願っています!

2
Elvin Ragip

相対パスを使用するようにしてください。絶対パスが機能しない場合があります

ok: "../../myImage.png"

間違っている: " http://www.example.com/myImage.png "

2
Justo Salcedo

奇妙なことに(2019年)、! include/tcpdf_static.phpの1924行目の何らかの理由で、ini_get('allow_url_fopen')を見るのは、それがfalseだったが、サーバー設定がtrueだった場合だけです。そのため、コードを修正し、正常に機能しました。これも以前は機能していましたが、突然停止しました!

0
Ukuser32