Bueno, mi pregunta es muy simple, solo quiero convertir la salida de imagepng
/imagejpg a base64, ¿cómo puedo hacer esto? ¿La forma correcta es capturar el búfer de salida? Gracias.
Convierta la salida GD a base64
Filip Roséen – árbitro
imagejpeg
/imagepng
no devuelve ningún dato, escriben los datos de la imagen directamente en el flujo de salida (o en un archivo).
Si desea capturar estos datos codificados como base64, el método más fácil es usar PHP Funciones de control de saliday luego usar base64_encode
sobre el $image_data
.
ob_start ();
imagejpeg ($img);
$image_data = ob_get_contents ();
ob_end_clean ();
$image_data_base64 = base64_encode ($image_data);
Lachmanski
El caso de uso más común para las imágenes codificadas en base64 es la salida HTML. Me gustaría ofrecer una solución más completa para este caso. También he agregado la capacidad de cambiar los formatos de imagen de salida.
// 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>';
}
-
¿Necesitamos llamar?
imagedestroy($gdImg)
o voluntadob_end_clean()
cuidar de eso por nosotros?– usuario3442612
3 de abril de 2017 a las 11:01
-
@user3442612 Es una buena práctica destruir manualmente las imágenes después de su uso. No creo que sea pertinente para esta breve muestra, pero lo agregaré para hacer las cosas “de la manera correcta”. Gracias.
– Lachmanski
4 de abril de 2017 a las 12:13