<?php
/**
* ACO File generator
*
* Adobe Color File (ACO) Generator Class
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* @package Adobe Color File (ACO) Generator Class
* @file aco.class.php
*/
class acofile
{
var $colors = array();
var $i = 0;
var $file;
var $count = 0;
function acofile($filename = "aco_file.aco")
{
$this->i = 0;
$this->file = $filename;
}
function add($param, $r=0, $g=0, $b=0)
{
if(!is_array($param))
{
$this->i++;
$this->colors[$this->i]['r'] = $r;
$this->colors[$this->i]['g'] = $g;
$this->colors[$this->i]['b'] = $b;
$this->colors[$this->i]['length'] = strlen($param) + 1;
$this->colors[$this->i]['name'] = $param;
}
else
foreach($param as $color => $rgb)
$this->add($color, $rgb[0], $rgb[1], $rgb[2]);
}
function n($x)
{
return sprintf("%c%c", ($x>>8)&0xff, $x&0xff);
}
function createAcofile()
{
$this->count = count($this->colors);
$out = $this->n(1);
$out .= $this->n($this->count);
for($k=1; $k<=$this->i; $k++)
{
$out .= $this->n(0);
$out .= $this->n(($this->colors[$k]['r']<<8)|$this->colors[$k]['r']);
$out .= $this->n(($this->colors[$k]['g']<<8)|$this->colors[$k]['g']);
$out .= $this->n(($this->colors[$k]['b']<<8)|$this->colors[$k]['b']);
$out .= $this->n(0);
}
$out .= $this->n(2);
$out .= $this->n($this->count);
for($l=1; $l<=$this->i; $l++)
{
$out .= $this->n(0);
$out .= $this->n(($this->colors[$l]['r']<<8)|$this->colors[$l]['r']);
$out .= $this->n(($this->colors[$l]['g']<<8)|$this->colors[$l]['g']);
$out .= $this->n(($this->colors[$l]['b']<<8)|$this->colors[$l]['b']);
$out .= $this->n(0);
$out .= $this->n(0);
$out .= $this->n($this->colors[$l]['length']);
for($m=0; $m<=strlen($this->colors[$l]['name'])-1; $m++)
{
$out .= $this->n(ord(substr($this->colors[$l]['name'], $m, $m+1)));
}
$out .= $this->n(0);
}
return $out;
}
function outputAcofile()
{
$aco = $this->createAcoFile();
header("Content-type: application/octet-stream");
header('Content-Length: ' . strlen($aco));
header("Content-disposition: attachment; filename=\"" . $this->file . "\"");
print $aco;
exit;
}
function saveAcofile() //Suggested by Horst Nogajski <info {at} nogajski <dot> de>
{
$fp = @fopen($this->file, 'wb'); // write binarysave (needed on windows systems, has no effect on Unix)
if($fp===FALSE)
{
return FALSE;
}
fwrite($fp,$this->createAcofile());
fclose($fp);
return TRUE;
}
}
?>
|