Buenas amigos.
Hoy después de mucho tiempo he revivido este post que yo mismo creé, porque justamente hoy he conseguido la solución al problema planteado.
Sin más aquí la solución.
/**
* Convierte un archivo png en formato binario.
*
* @param string $archivo
* @return objeto de tipo blob.
*/
public static function pngABlob ( $archivo ) {
$imagenCreada = imagecreatefrompng ( $archivo );
if ( imagealphablending ( $imagenCreada, true ) ) {//SI SE ESTABLECE EL CANAL ALPHA
imagesavealpha ( $imagenCreada, true );
}
ob_start ();
imagepng ( $imagenCreada );
$imagen = ob_get_contents ();
ob_end_clean ();
return base64_encode ( $imagen );
}
Lo único diferente es que para poder manejar las transparencias hay que usar las siguientes líneas de código:
imagealphablending ( $imagenCreada, true )
Para establecer el canal ALPHA
y
imagesavealpha ( $imagenCreada, true );
para guardar el canal ALPHA si es establecido
y con esto doy por terminado este post, espero les sirva de ayuda.
PD: si desean mostrar el resultado de este código, solo tienen que hacer uso de la siguiente línea de código:
echo '<img src="' . Imagenes::mostrarBlob ( $mi_objeto->getImagen () ) . '"/>';
donde mostrarBlob es esto:
public static function mostrarBlob ( $blob ) {
$mime = Archivos::obtenerMimeTypeBlob ( $blob );
return "data:" . $mime . ";base64," . $blob;
}
y obtenerMimeTypeBlob es
public static function obtenerMimeTypeBlob ( $blob ) {
$Types = array (
"474946383761"=>"image/gif",
"474946383961"=>"image/gif",
"89504E470D0A1A0A"=>"image/png",
"FFD8FFE0"=>"image/jpeg",
"FFD8FFE1"=>"image/jpeg",
"FFD8FFE8"=>"image/jpeg",
"25504446"=>"application/pdf",
"377ABCAF271C"=>"application/zip",
"504B0304"=>"application/zip",
);
$blob = base64_decode ( $blob );
$Signature = substr ( $blob, 0, 60 );
$Signature = array_shift ( unpack ( "H*", $Signature ) );
foreach ( $Types as $MagicNumber => $Mime ) {
if ( stripos ( $Signature, $MagicNumber ) === 0 ) {
return $Mime;
}
}
return "application/octet-stream";
}
Muchas gracias de todas formas aunque se que el manejo de imagen no es el fuerte de muchos de nosotros, hasta una próxima.