Convierta la salida GD a base64

2 minutos de lectura

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.

avatar de usuario
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);

avatar de usuario
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 voluntad ob_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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad