2011-12-18 11 views
21

私の質問は非常に単純です。imagepng/imagejpgの出力をbase64に変換したいのですが、どうすればいいですか?正しい方法は出力バッファをキャプチャすることですか?ありがとう。GD出力をbase64に変換する

答えて

50

imagejpeg/imagepngはデータを返しません。出力ストリーム(またはファイル)に直接画像データを書き込みます。

このデータをbase64でエンコードする場合、最も簡単な方法は、PHPを使用し、次に$image_database64_encodeを使用することです。

ob_start(); 

    imagejpeg ($img); 
    $image_data = ob_get_contents(); 

ob_end_clean(); 

$image_data_base64 = base64_encode ($image_data); 
4

base64でエンコードされた画像の最も一般的な使用例は、HTML出力です。私はこのケースのためのより完全なソリューションを提供したいと思います。私は出力画像フォーマットを切り替える機能も追加しました。

// Example 
$gdImg = imagecreate(100, 100); 
imagecolorallocate($gdImg, 0, 0, 0); 
echo gdImgToHTML($gdImg); 
imagedestroy($gdImg); 

// Create an HTML Img Tag with Base64 Image Data 
function gdImgToHTML($gdImg, $format='jpg') { 

    // Validate Format 
    if(in_array($format, array('jpg', 'jpeg', 'png', 'gif'))) { 

     ob_start(); 

     if($format == 'jpg' || $format == 'jpeg') { 

      imagejpeg($gdImg); 

     } elseif($format == 'png') { 

      imagepng($gdImg); 

     } elseif($format == 'gif') { 

      imagegif($gdImg); 
     } 

     $data = ob_get_contents(); 
     ob_end_clean(); 

     // Check for gd errors/buffer errors 
     if(!empty($data)) { 

      $data = base64_encode($data); 

      // Check for base64 errors 
      if ($data !== false) { 

       // Success 
       return "<img src='data:image/$format;base64,$data'>"; 
      } 
     } 
    } 

    // Failure 
    return '<img>'; 
} 
+0

'imagedestroy($ gdImg)'を呼び出すか、 'ob_end_clean()'を呼び出す必要がありますか? – user3442612

+0

@ user3442612使用後に手動でイメージを破壊することをお勧めします。私はこの短いサンプルには適切だとは思わないが、 "正しい方法"をするために追加する予定だ。ありがとう。 – Lachmanski

関連する問題