2012-01-10 4 views
8

PHP/GDで作成されたイメージをOOP形式で表示する方法を作成しようとしています。これを達成するために、私は、とりわけイメージを作成するクラスを作成しました。このようなもの:イメージヘッダ付きの外部PHPを使わずに、保存せずにPHP/GDで作成したイメージを表示できますか?

<?php 
    class MyClass 
    { 
     public $image; 
     function __construct() 
     { 
      ... 
      $this->image = imagecreatetruecolor(100,100); 
      $bg = imagecolorallocate($this->image,100,100,100); 
      imagefilledrectangle($this->image,0,0,100,100,$bg); 
      ... 
     } 
     ... 
    } 

    $myvar = new MyClass 
?> 

画像を出力するクラス内に関数を作成しようとしました。このようなもの:

function show() 
{ 
    echo "<img src='" . imagejpeg($this->image,100) . "' />"; 
} 

しかし、うまくいきませんでした。私も試しました

function show() 
{ 
    echo "<img src='data:image/jpeg;base64," . imagejpeg($this->image,100) . "' />"; 
} 

これも機能しませんでした。アイデアは単にHTMLから関数を呼び出すことでした。このように:

<div id='anyid'> 
    <?php $myvar->show(); ?> 
</div> 

私はこれをすべて間違っていますか?私が欲しいものを達成する方法はありますか? img = 'mycode.php'を使用する方法を考えようとしましたが、ページがロードされてイメージがページの途中に現れる前にクラスを作成する必要があるため、私のためには機能しません。

ありがとうございました。

+0

あなたは、ほとんどのショー()でそれを持っていた - あなただけの出力に – Aknosis

答えて

26

まず、あなたは100は品質パラメータであることを許可するようにimagejpeg()に2つ目のパラメータを挿入する必要があります。

data:image/jpeg;base64
public function show() { 

     // Begin capturing the byte stream 
     ob_start(); 

     // generate the byte stream 
     imagejpeg($this->image, NULL, 100); 

     // and finally retrieve the byte stream 
     $rawImageBytes = ob_get_clean(); 

     echo "<img src='data:image/jpeg;base64," . base64_encode($rawImageBytes) . "' />"; 

    } 

生のバイトは、BASE64としてエンコード取得する必要があります。その後、あなたはbase64でエンコード生のバイトする必要があります。

さらに、MyClassの内部で作成され維持されていると仮定して、$imageprotectedに変更することを提案します。

+0

おかげSTEAPをBASE64_ENCODEする必要があります。私は試しましたが、HTMLコードを見ると** ** –

+1

imagejpeg()関数は出力バッファリング関数でラップしてコンテンツをキャプチャする必要があります。ファイル名は "100" imagejpeg()はあなたのウェブサイトのフォルダにあなたのイメージを持っています。返すことはできません:) – Scuzzy

+0

@Scuzzy私のせいです。 100を3番目のパラメータにするには、2番目のパラメータとしてNULLを渡します。 – SteAp

1

1つのコード行が解決され、3時間のブラインド検索の後に解決されます。

... 
ob_start(); 
header("Content-type: image/jpeg"); <br/> 
imagejpeg($this->img, NULL, $qualidade);<br/> 
imagedestroy($this->img);<br/> 
$i = ob_get_clean();<br/> 

echo "<img src='data:image/jpeg;base64," . base64_encode($i)."'>"; //saviour line! 

個!

関連する問題