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