294 lines
8.7 KiB
PHP
294 lines
8.7 KiB
PHP
<?php
|
|
class xls_palette {
|
|
var $htmlcolorarray = array("aliceblue" => "#f0f8ff",
|
|
"antiquewhite" => "#faebd7",
|
|
"aqua" => "#00ffff",
|
|
"aquamarine" => "#7fffd4",
|
|
"azure" => "#f0ffff",
|
|
"beige" => "#f5f5dc",
|
|
"bisque" => "#ffe4c4",
|
|
"black" => "#000000",
|
|
"blanchedalmond" => "#ffebcd",
|
|
"blue" => "#0000ff",
|
|
"blueviolet" => "#8a2be2",
|
|
"brown" => "#a52a2a",
|
|
"burlywood" => "#deb887",
|
|
"cadetblue" => "#5f9ea0",
|
|
"chartreuse" => "#7fff00",
|
|
"chocolate" => "#d2691e",
|
|
"coral" => "#ff7f50",
|
|
"cornflowerblue" => "#6495ed",
|
|
"cornsilk" => "#fff8dc",
|
|
"crimson" => "#dc143c",
|
|
"cyan" => "#00ffff",
|
|
"darkblue" => "#00008b",
|
|
"darkcyan" => "#008b8b",
|
|
"darkgoldenrod" => "#b8860b",
|
|
"darkgray" => "#a9a9a9",
|
|
"darkgrey" => "#a9a9a9",
|
|
"darkgreen" => "#006400",
|
|
"darkkhaki" => "#bdb76b",
|
|
"darkmagenta" => "#8b008b",
|
|
"darkolivegreen" => "#556b2f",
|
|
"darkorange" => "#ff8c00",
|
|
"darkorchid" => "#9932cc",
|
|
"darkred" => "#8b0000",
|
|
"darksalmon" => "#e9967a",
|
|
"darkseagreen" => "#8fbc8f",
|
|
"darkslateblue" => "#483d8b",
|
|
"darkslategray" => "#2f4f4f",
|
|
"darkslategrey" => "#2f4f4f",
|
|
"darkturquoise" => "#00ced1",
|
|
"darkviolet" => "#9400d3",
|
|
"deeppink" => "#ff1493",
|
|
"deepskyblue" => "#00bfff",
|
|
"dimgray" => "#696969",
|
|
"dimgrey" => "#696969",
|
|
"dodgerblue" => "#1e90ff",
|
|
"firebrick" => "#b22222",
|
|
"floralwhite" => "#fffaf0",
|
|
"forestgreen" => "#228b22",
|
|
"fuchsia" => "#ff00ff",
|
|
"gainsboro" => "#dcdcdc",
|
|
"ghostwhite" => "#f8f8ff",
|
|
"gold" => "#ffd700",
|
|
"goldenrod" => "#daa520",
|
|
"gray" => "#808080",
|
|
"grey" => "#808080",
|
|
"green" => "#008000",
|
|
"greenyellow" => "#adff2f",
|
|
"honeydew" => "#f0fff0",
|
|
"hotpink" => "#ff69b4",
|
|
"indianred" => "#cd5c5c",
|
|
"indigo" => "#4b0082",
|
|
"ivory" => "#fffff0",
|
|
"khaki" => "#f0e68c",
|
|
"lavender" => "#e6e6fa",
|
|
"lavenderblush" => "#fff0f5",
|
|
"lawngreen" => "#7cfc00",
|
|
"lemonchiffon" => "#fffacd",
|
|
"lightblue" => "#add8e6",
|
|
"lightcoral" => "#f08080",
|
|
"lightcyan" => "#e0ffff",
|
|
"lightgoldenrodyellow" => "#fafad2",
|
|
"lightgray" => "#d3d3d3",
|
|
"lightgrey" => "#d3d3d3",
|
|
"lightgreen" => "#90ee90",
|
|
"lightpink" => "#ffb6c1",
|
|
"lightsalmon" => "#ffa07a",
|
|
"lightseagreen" => "#20b2aa",
|
|
"lightskyblue" => "#87cefa",
|
|
"lightslategray" => "#778899",
|
|
"lightslategrey" => "#778899",
|
|
"lightsteelblue" => "#b0c4de",
|
|
"lightyellow" => "#ffffe0",
|
|
"lime" => "#00ff00",
|
|
"limegreen" => "#32cd32",
|
|
"linen" => "#faf0e6",
|
|
"magenta" => "#ff00ff",
|
|
"maroon" => "#800000",
|
|
"mediumaquamarine" => "#66cdaa",
|
|
"mediumblue" => "#0000cd",
|
|
"mediumorchid" => "#ba55d3",
|
|
"mediumpurple" => "#9370d8",
|
|
"mediumseagreen" => "#3cb371",
|
|
"mediumslateblue" => "#7b68ee",
|
|
"mediumspringgreen" => "#00fa9a",
|
|
"mediumturquoise" => "#48d1cc",
|
|
"mediumvioletred" => "#c71585",
|
|
"midnightblue" => "#191970",
|
|
"mintcream" => "#f5fffa",
|
|
"mistyrose" => "#ffe4e1",
|
|
"moccasin" => "#ffe4b5",
|
|
"navajowhite" => "#ffdead",
|
|
"navy" => "#000080",
|
|
"oldlace" => "#fdf5e6",
|
|
"olive" => "#808000",
|
|
"olivedrab" => "#6b8e23",
|
|
"orange" => "#ffa500",
|
|
"orangered" => "#ff4500",
|
|
"orchid" => "#da70d6",
|
|
"palegoldenrod" => "#eee8aa",
|
|
"palegreen" => "#98fb98",
|
|
"paleturquoise" => "#afeeee",
|
|
"palevioletred" => "#d87093",
|
|
"papayawhip" => "#ffefd5",
|
|
"peachpuff" => "#ffdab9",
|
|
"peru" => "#cd853f",
|
|
"pink" => "#ffc0cb",
|
|
"plum" => "#dda0dd",
|
|
"powderblue" => "#b0e0e6",
|
|
"purple" => "#800080",
|
|
"red" => "#ff0000",
|
|
"rosybrown" => "#bc8f8f",
|
|
"royalblue" => "#4169e1",
|
|
"saddlebrown" => "#8b4513",
|
|
"salmon" => "#fa8072",
|
|
"sandybrown" => "#f4a460",
|
|
"seagreen" => "#2e8b57",
|
|
"seashell" => "#fff5ee",
|
|
"sienna" => "#a0522d",
|
|
"silver" => "#c0c0c0",
|
|
"skyblue" => "#87ceeb",
|
|
"slateblue" => "#6a5acd",
|
|
"slategray" => "#708090",
|
|
"slategrey" => "#708090",
|
|
"snow" => "#fffafa",
|
|
"springgreen" => "#00ff7f",
|
|
"steelblue" => "#4682b4",
|
|
"tan" => "#d2b48c",
|
|
"teal" => "#008080",
|
|
"thistle" => "#d8bfd8",
|
|
"tomato" => "#ff6347",
|
|
"turquoise" => "#40e0d0",
|
|
"violet" => "#ee82ee",
|
|
"wheat" => "#f5deb3",
|
|
"white" => "#ffffff",
|
|
"whitesmoke" => "#f5f5f5",
|
|
"yellow" => "#ffff00",
|
|
"yellowgreen" => "#9acd32");
|
|
|
|
var $palette_array = array( 0x000000,
|
|
0xffffff,
|
|
0xff0000,
|
|
0x00ff00,
|
|
0x0000ff,
|
|
0xffff00,
|
|
0xff00ff,
|
|
0x00ffff,
|
|
0x800000,
|
|
0x008000,
|
|
0x000080,
|
|
0x808000,
|
|
0x800080,
|
|
0x008080,
|
|
0xc0c0c0,
|
|
0x808080,
|
|
0x9999ff,
|
|
0x993366,
|
|
0xffffcc,
|
|
0xccffff,
|
|
0x660066,
|
|
0xff8080,
|
|
0x0066cc,
|
|
0xccccff,
|
|
0x000080,
|
|
0xff00ff,
|
|
0xffff00,
|
|
0x00ffff,
|
|
0x800080,
|
|
0x800000,
|
|
0x008080,
|
|
0x0000ff,
|
|
0x00ccff,
|
|
0xccffff,
|
|
0xccffcc,
|
|
0xffff99,
|
|
0x99ccff,
|
|
0xff99cc,
|
|
0xcc99ff,
|
|
0xffcc99,
|
|
0x3366ff,
|
|
0x33cccc,
|
|
0x99cc00,
|
|
0xffcc00,
|
|
0xff9900,
|
|
0xff6600,
|
|
0x666699,
|
|
0x969696,
|
|
0x003366,
|
|
0x339966,
|
|
0x003300,
|
|
0x333300,
|
|
0x993300,
|
|
0x993366,
|
|
0x333399,
|
|
0xc7c7c7
|
|
);
|
|
public function getcoloridx($acolor) {
|
|
if (is_array($acolor)) {
|
|
$red = $acolor["red"];
|
|
$green = $acolor["green"];
|
|
$blue = $acolor["blue"];
|
|
return $this->findcolor($red,$green,$blue);
|
|
}
|
|
else if (!is_numeric($acolor)) {
|
|
if ($acolor{0}=="#") {
|
|
return $this->findhtmlcolor($acolor);
|
|
}
|
|
else {
|
|
return $this->findnamedcolor($acolor);
|
|
}
|
|
}
|
|
else {
|
|
$red = ($acolor & 0x00ff0000) >> 16;
|
|
$green = ($acolor & 0x0000ff00) >> 8;
|
|
$blue = ($acolor & 0x000000ff);
|
|
return $this->findcolor($red,$green,$blue);
|
|
}
|
|
}
|
|
|
|
public function findnamedcolor($colorname) {
|
|
if (!isset($this->htmlcolorarray[strtolower($colorname)])) { die("unknown color name."); }
|
|
return $this->findhtmlcolor($this->htmlcolorarray[strtolower($colorname)]);
|
|
}
|
|
|
|
public function findhtmlcolor($htmlcolor) {
|
|
$red = hexdec(substr($htmlcolor,1,2));
|
|
$green = hexdec(substr($htmlcolor,3,2));
|
|
$blue = hexdec(substr($htmlcolor,5,2));
|
|
return $this->findcolor($red,$green,$blue);
|
|
}
|
|
|
|
public function findcolor($ared,$agreen,$ablue) {
|
|
$rgbval = 0;
|
|
$rgbval = ($ared<<16) | ($agreen << 8) | ($ablue << 0);
|
|
// before allocate, check the color in the array
|
|
// if found, return colorindex
|
|
$colorindex = array_search($rgbval,$this->palette_array);
|
|
if ($colorindex===false) {
|
|
return $colorindex;
|
|
//$colorindex = count($this->palette_array);
|
|
//$this->palette_array[] = $rgbval;
|
|
}
|
|
$colorindex += 8;
|
|
return $colorindex;
|
|
}
|
|
|
|
public function change_color($idx,$color) {
|
|
$oldidx = $this->getcoloridx($color);
|
|
if ($oldidx!==false) { return $oldidx; }
|
|
if (is_array($color)) {
|
|
$red = $acolor["red"];
|
|
$green = $acolor["green"];
|
|
$blue = $acolor["blue"];
|
|
$rgbval = ($red<<16) | ($green << 8) | ($blue << 0);
|
|
$this->palette_array[$idx-8] = $rgbval;
|
|
}
|
|
else if (!is_numeric($color)) {
|
|
if ($color{0}=="#") {
|
|
$rgbval = hexdec(substr($color,1));
|
|
$this->palette_array[$idx-8] = $rgbval;
|
|
}
|
|
else {
|
|
if (!isset($this->htmlcolorarray[strtolower($color)])) { die("unknown color name."); }
|
|
$this->palette_array[$idx-8] = hexdec(substr($this->htmlcolorarray[strtolower($color)],1));
|
|
}
|
|
}
|
|
else {
|
|
$this->palette_array[$idx-8] = $color;
|
|
}
|
|
return $idx;
|
|
}
|
|
|
|
public function save($filehandle,$xls_biffobject) {
|
|
$xls_biffobject->clear(BIFF_PALETTE);
|
|
$xls_biffobject->append(XLSDATA_SHORT,count($this->palette_array));
|
|
foreach ($this->palette_array as $key => $color_data) {
|
|
$tmp = $color_data<<8;
|
|
$xls_biffobject->append(XLSDATA_DATA32BIT,$tmp);
|
|
}
|
|
$xls_biffobject->save($filehandle);
|
|
}
|
|
}
|
|
?>
|