Bulding an archive of images dynamicly

Recently I had a need to gather a group of images, add a watermark, and zip them up so a user could download them. Instead of create all of these zip files each time anything is changed, I instead wrote a class to do this all for me.

This class requires Cana_Zip and Cana_Thumb

class myZip extends Cana_Zip { public function __construct($params = array()) { parent::__construct($params); } public function create($params = array()) { // here i queried our database to get a list of files. // you could also loop through a directory $files = array();

  // create the thumb object
  $thumb = new Cana_Thumb(array(
    'path'       => 'images/',
    'cache'     => 'imagecache/',
    'watermarkSrc'    => 'images/watermark.png',
    'watermark'    => true,
    'format'    => 'jpg'

  $zipedFiles = array();
  foreach ($files as $file) {
    // write the thumb
    $out = $thumb->writeThumb($file->image);
    // add the cached image path to the zip
    $zipedFiles[$file->image] = $out['file'];

  // write out the zip file
  $out = $this->create($zipedFiles, array(
    'name' => 'myzip.zip',
    'destination' => 'zip/'


Once our class is set up, we now need to use it.

// create the zip $zip = new myZip(array( 'destination' => './zip' )); // give it to the user header('Location: /zip/myzip.zip');