2009-07-30 15 views
18

Estoy usando una solución para ensamblar archivos de imagen en un archivo zip y transmitirlo a la aplicación navegador/Flex. (ZipStream por Paul Duncan, http://pablotron.org/software/zipstream-php/).PHP GD: ¿Cómo obtener imagedata como una cadena binaria?

Simplemente cargar los archivos de imagen y comprimirlos funciona bien. Aquí está el núcleo para comprimir un archivo:

// Reading the file and converting to string data 
$stringdata = file_get_contents($imagefile); 

// Compressing the string data 
$zdata = gzdeflate($stringdata); 

Mi problema es que quiero para procesar la imagen con GD antes de comprimirla. Por lo tanto necesito una solución para convertir los datos de imagen (imagecreatefrompng) al formato de datos de serie:

// Reading the file as GD image data 
$imagedata = imagecreatefrompng($imagefile); 
// Do some GD processing: Adding watermarks etc. No problem here... 

// HOW TO DO THIS??? 
// convert the $imagedata to $stringdata - PROBLEM! 

// Compressing the string data 
$zdata = gzdeflate($stringdata);

Alguna pista?

Respuesta

39

Una forma es decir GD a la salida de la imagen, a continuación, utilizar el almacenamiento en búfer de PHP para capturarlo en una cadena:

$imagedata = imagecreatefrompng($imagefile); 
ob_start(); 
imagepng($imagedata); 
$stringdata = ob_get_contents(); // read from buffer 
ob_end_clean(); // delete buffer 
$zdata = gzdeflate($stringdata); 
8
// ob_clean(); // optional 
ob_start(); 
imagepng($imagedata); 
$image = ob_get_clean(); 
+0

ob_get_clean() ejecuta esencialmente ambas ob_get_contents() y ob_end_clean(), por lo esta solución es un poco más elegante que la respuesta aceptada anteriormente. –