【发布时间】:2012-01-23 00:25:53
【问题描述】:
好吧,我的问题很简单,我只想将imagepng/imagejpg 的输出转换为base64,我该怎么做?正确的方法是捕获输出缓冲区?谢谢。
【问题讨论】:
好吧,我的问题很简单,我只想将imagepng/imagejpg 的输出转换为base64,我该怎么做?正确的方法是捕获输出缓冲区?谢谢。
【问题讨论】:
imagejpeg/imagepng 不返回任何数据,它们将图像数据直接写入输出流(或文件)。
如果您想捕获编码为 base64 的数据,最简单的方法是使用 PHP Output Control Functions,然后在 $image_data 上使用 base64_encode。
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>';
}
【讨论】:
imagedestroy($gdImg) 还是ob_end_clean() 会为我们处理这个问题?