La solution est d'utiliser la bufferisation de la sortie standard de php pour récupérer la ressource sous forme de string :
ob_start(); imagejpeg($imageBase); $string = ob_get_contents(); ob_end_clean();
Un petit exemple de mise en situation : Créer une archive zip contenant des images issues d'une fusion de plusieurs images contenues dans un BLOB d'une base de données :
$zip = new ZipArchive(); $op = $zip->open('test.zip',ZipArchive::CREATE); foreach($ids as $id) { ob_start(); $data = $bd->getById($id); $imageBase = $bd->generateImage($data); imagejpeg($imageBase); $zip->addFromString($data->id.'.jpg',ob_get_contents()); ob_end_clean(); } $zip->close();
Il est ainsi possible de créer à la volée l'archive sans avoir à écrire les fichiers sur le disque. La consommation mémoire est en revanche plus élevée. A titre d'exemple , une archive avec 380 images d'environs 20Ko aura consommé 18Mo de mémoire.
Aucun commentaire:
Enregistrer un commentaire