picture_array = array(); $this->filename = $afilename; $tmp = explode(".",$afilename); if (count($tmp)<2) { die("missing filename extension."); } if (!file_exists($afilename)) { die("file does not exist."); } $this->bgcolor = $abgcolor; $this->bgcolorrgb = $abgcolorrgb; $this->fgcolor = $afgcolor; $this->objectid = $aobjectid; $this->firstrow = $arow; $this->firstcol = $acol; } function scanimgline($imagehd, $line, $width, $bgcolor) { for ($x=0; $x!=$width; $x++) { $colorindex = imagecolorat($imagehd, $x, $line); $rgb = imagecolorsforindex($imagehd, $colorindex); if ($rgb["alpha"]!=0) { $dstR = $bgcolor >> 16 & 0xFF; $dstG = $bgcolor >> 8 & 0xFF; $dstB = $bgcolor & 0xFF; $rgb["red"] = (($rgb["red"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstR * $rgb["alpha"]) >> 8); $rgb["green"] = (($rgb["green"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstG * $rgb["alpha"]) >> 8); $rgb["blue"] = (($rgb["blue"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstB * $rgb["alpha"]) >> 8); } $this->picture_array[] = $rgb["blue"]; $this->picture_array[] = $rgb["green"]; $this->picture_array[] = $rgb["red"]; /* $this->picture_array[] = ($colorindex >> 16) & 0x0ff; $this->picture_array[] = ($colorindex >> 8) & 0x0ff; $this->picture_array[] = $colorindex & 0x0ff; */ } if ((count($this->picture_array) & 0x3)!=0) { $fsize = count($this->picture_array) & 0x3; $reqbytes = 0x4 - $fsize; while ($reqbytes>0) { $this->picture_array[] = 0; } } } function loaddata() { $tmp = explode(".",$this->filename); $ext = strtolower($tmp[count($tmp)-1]); switch ($ext) { case "bmp" : die("Windows BitMaP file not supported."); break; case "gif" : $img=imagecreatefromgif($this->filename); break; case "jpg" : case "jpeg" : $img=imagecreatefromjpeg($this->filename); break; case "png" : $img=imagecreatefrompng($this->filename); break; case "xbm" : $img=imagecreatefromxbm($this->filename); break; case "xpm" : $img=imagecreatefromxpm($this->filename); break; default : die("Invalid / unknown filetype (extension)."); break; } $this->imagewidth = imagesx($img); $this->imageheight = imagesy($img); $y=$this->imageheight; while ($y>0) { $y--; $this->scanimgline($img, $y, $this->imagewidth, $this->bgcolorrgb); } imagedestroy($img); } function save($filehandle,$xls_biffobject) { $xls_biffobject->clear(BIFF_OBJECT); $xls_biffobject->append(XLSDATA_LONG,1); // one object $xls_biffobject->append(XLSDATA_SHORT,8); // obj,type = picture $xls_biffobject->append(XLSDATA_SHORT,$this->objectid); $xls_biffobject->append(XLSDATA_SHORT,0x0614); $xls_biffobject->append(XLSDATA_SHORT,$this->firstcol); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,$this->firstrow); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,$this->lastcol); $xls_biffobject->append(XLSDATA_SHORT,$this->imageright); $xls_biffobject->append(XLSDATA_SHORT,$this->lastrow); $xls_biffobject->append(XLSDATA_SHORT,$this->imagebottom); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,0x0005); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_BYTE,$this->bgcolor); $xls_biffobject->append(XLSDATA_BYTE,$this->fgcolor); $xls_biffobject->append(XLSDATA_BYTE,0); $xls_biffobject->append(XLSDATA_BYTE,0); $xls_biffobject->append(XLSDATA_BYTE,8); $xls_biffobject->append(XLSDATA_BYTE,0xff); $xls_biffobject->append(XLSDATA_BYTE,1); $xls_biffobject->append(XLSDATA_BYTE,0); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,0x0009); //$xls_biffobject->append(XLSDATA_LONG,0x370510b9); $xls_biffobject->append(XLSDATA_LONG,0x00000000); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,0); $xls_biffobject->append(XLSDATA_SHORT,0x0001); $xls_biffobject->append(XLSDATA_LONG,0x0000); $s = "Picture".$this->objectid; $xls_biffobject->append(XLSDATA_STRING,$s); $xls_biffobject->save($filehandle); $xls_biffobject->clear(BIFF_IMAGEDATA); $xls_biffobject->append(XLSDATA_SHORT,0x0009); $xls_biffobject->append(XLSDATA_SHORT,0x0001); $xls_biffobject->append(XLSDATA_LONG,count($this->picture_array)+12); if (defined("PICTUREDEBUG")) { echo "picture size : ".count($this->picture_array)." (".dechex(count($this->picture_array)).")
\n"; } $xls_biffobject->append(XLSDATA_LONG,0x0000000c); $xls_biffobject->append(XLSDATA_SHORT,$this->imagewidth); $xls_biffobject->append(XLSDATA_SHORT,$this->imageheight); $xls_biffobject->append(XLSDATA_SHORT,1); $xls_biffobject->append(XLSDATA_SHORT,24); foreach ($this->picture_array as $data) { $xls_biffobject->append(XLSDATA_BYTE,$data); } $xls_biffobject->save($filehandle); } } ?>