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