Мне было интересно, есть ли способ кодировать изображение на 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'>
Как я могу это сделать?
$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 ) . "'>"; }