web-dev-qa-db-ja.com

Gd出力をbase64に変換します

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

23
user862010

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

Base64としてエンコードされたこのデータをキャプチャする場合、最も簡単な方法はPHPを使用することです 出力制御関数 、次に base64_encode$image_data

ob_start (); 

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

ob_end_clean (); 

$image_data_base64 = base64_encode ($image_data);
56

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>';
}
4
Lachmanski