Ну, мой вопрос очень прост, я просто хочу преобразовать вывод imagepng
/ imagejpg в base64, как я могу это сделать? Правильно ли это с захватом выходного буфера? Благодарю.
imagejpeg
/ imagepng
не возвращает никаких данных, они записывают данные изображения непосредственно в выходной поток (или в файл).
Если вы хотите захватить эти данные, закодированные как base64, самый простой способ – использовать функции управления выводами PHPs, а затем использовать base64_encode
для $image_data
.
ob_start (); imagejpeg ($img); $image_data = ob_get_contents (); ob_end_clean (); $image_data_base64 = base64_encode ($image_data);
Наиболее распространенным вариантом использования для кодированных изображений 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>'; }