<?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;
 
    }
 
}
 
?>
 
 
 |