2009-07-30 15 views
18

Używam rozwiązania do składania plików obrazów do pliku zip i przesyłania strumieniowego do przeglądarki/aplikacji Flex. (ZipStream, Paul Duncan, http://pablotron.org/software/zipstream-php/).PHP GD: Jak uzyskać Imagedata jako ciąg binarny?

Wystarczy załadować pliki obrazów i je skompresować działa dobrze. Oto rdzeń do kompresji pliku:

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

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

Mój problem jest, że chcę, aby przetworzyć obraz przy użyciu GD przed ściskając go. Dlatego potrzebuję rozwiązania do konwersji danych obrazu (imagecreatefrompng) na format danych ciągów:

// 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);

Jakieś wskazówki?

Odpowiedz

39

Jednym ze sposobów jest powiedzieć GD do wyjścia obrazu, a następnie za pomocą PHP buforowanie uchwycić go na ciąg:

$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() zasadniczo wykonuje zarówno ob_get_contents() i ob_end_clean(), tak to rozwiązanie jest nieco bardziej eleganckie niż zaakceptowana powyżej odpowiedź. –