Как кодировать ресурс изображения в base64?
Мне было интересно, есть ли способ кодировать изображение в base64, если это был ресурс, например, если я загрузил изображение с помощью GD
$image = imagecreatefromjpeg("captcha/$captcha-$num.jpg");
// Add some filters
imagefilter($image, IMG_FILTER_PIXELATE, 1, true);
imagefilter($image, IMG_FILTER_MEAN_REMOVAL);
Если бы это был мой код, а не сохранять изображение и отображать его с помощью
<img src='someimage.jpg'>
Я хотел, чтобы отобразить его как URI данных без необходимости сохранять его, как
<img data='src="data:image/jpeg;base64,BASE64_HERE'>
Как я могу это сделать?
2 ответа
Решение
$image = imagecreatefromjpeg("captcha/$captcha-$num.jpg");
// Add some filters
imagefilter($image, IMG_FILTER_PIXELATE, 1, true);
imagefilter($image, IMG_FILTER_MEAN_REMOVAL);
ob_start(); // Let's start output buffering.
imagejpeg($image); //This will normally output the image, but because of ob_start(), it won't.
$contents = ob_get_contents(); //Instead, output above is saved to $contents
ob_end_clean(); //End the output buffer.
$dataUri = "data:image/jpeg;base64," . base64_encode($contents);
Я написал функцию для этого. Это также позволяет вам изменять формат выходного изображения на лету.
// Example
$im = imagecreate( 100, 100 );
imagecolorallocate( $im, 0, 0, 0 );
echo gdImgToHTML($im);
// Creates an HTML Img Tag with Base64 Image Data
function gdImgToHTML( $gdImg, $format='jpeg' ) {
ob_start();
if( $format == 'jpeg'){
imagejpeg( $gdImg );
}
else
if( $format == 'png' ){
imagepng( $gdImg );
}
else
if( $format == 'gif' )
{
imagegif( $gdImg );
}
$image_data = ob_get_contents();
ob_end_clean();
return "<img src='data:image/$format;base64," . base64_encode( $image_data ) . "'>";
}