text = $text : 0; isset($style) ? $this->style = $style : 0; isset($displaytext) ? $this->displaytext = $displaytext : 0; isset($gzip) ? $this->gzip = $gzip : 0; $stylesheet = ANYFONT_FONTDIR."/styles.ini"; // $this->expiryTime = gmdate('D, d M Y H:i:s', mktime(0, 0, 0, date("m"), date("d")+7, date("Y"))).' GMT'; if($this->style == "admin"){ // $this->expiryTime = gmdate('D, d M Y H:i:s', mktime(0, 0, 0, date("m"), date("d"), date("Y")-15)).' GMT'; $this->fontsettings = array(); $this->fontsettings['font-name'] = $this->text; $this->text = $this->displaytext; if($this->displaytext == "charactermap"){ $i = 33; $txt = ""; while($i < 127){ $txt .= "&#$i; "; $i++; } $i = 188; while($i < 255){ $txt .= "&#$i; "; $i++; } $this->text = html_entity_decode(urldecode($txt), ENT_QUOTES); } $this->fontsettings['color'] = "333333"; $this->fontsettings['font-size'] = 20; $this->fontsettings['shadow'] = false; $this->fontsettings['shadow-color'] = "FFFFFF"; $this->fontsettings["limit-width"] = true; $this->fontsettings["max-width"] = 62; } else if($this->style == "admin-small"){ $this->fontsettings = array(); $this->fontsettings['font-name'] = $this->text; $this->text = $this->displaytext; $this->fontsettings['color'] = "333333"; $this->fontsettings['font-size'] = 18; $this->fontsettings['shadow'] = false; $this->fontsettings['shadow-color'] = "FFFFFF"; $this->fontsettings['shadow-spread'] = 0; }else if(file_exists($stylesheet)){ $styles = parse_ini_file($stylesheet, true); if(isset($styles[$this->style])){ $this->fontsettings = $styles[$this->style]; } else { wp_redirect(get_option('siteurl')); } } if(is_array($this->fontsettings)){ $this->linecount = 1; if ($this->fontsettings["limit-width"]){ $this->text = wordwrap($this->text, (int)$this->fontsettings["max-width"], "\n", true); } !isset($this->fontsettings['shadow-distance']) ? $this->fontsettings['shadow-distance'] = 1 : 0; !isset($this->fontsettings['shadow-spread']) ? $this->fontsettings['shadow-spread'] = 1 : 0; $this->fonttype = !file_exists(ANYFONT_FONTDIR."/".$this->fontsettings['font-name'].".ttf") ? ".otf" : ".ttf"; $hash = md5(basename($this->fontsettings['font-name']).$this->fontsettings['color'].$this->fontsettings['font-size'].$this->fontsettings['shadow-spread'].$this->fontsettings['shadow-distance'].$this->fontsettings['shadow'].$this->fontsettings['shadow-color'].$this->fontsettings['limit-width'].$this->fontsettings['max-width'].$this->text); $this->etag = $hash; $this->cache_file = ANYFONT_CACHE."/$hash.png"; if(file_exists($this->cache_file) && (isset($_SERVER["HTTP_IF_NONE_MATCH"]) && $_SERVER["HTTP_IF_NONE_MATCH"] == $this->etag)){ header("HTTP/1.0 304 Not Modified"); exit(0); // if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == gmdate('D, d M Y H:i:s', filemtime($this->cache_file)).' GMT'){ // header("HTTP/1.0 304 Not Modified"); // exit(0); // } else{ // self::fetchImage(); // } } else { self::text2Image(); } } else { wp_redirect(get_option('siteurl')); exit(0); } } /** Description * Creates a png image from a text string using truetype fonts and writes the file to cache */ private function text2Image(){ $image = new Imagick(); $draw = new ImagickDraw(); $draw->setFillColor(new ImagickPixel("#".$this->fontsettings['color'])); $draw->setFont(ANYFONT_FONTDIR."/".$this->fontsettings['font-name'].$this->fonttype); $draw->setFontSize($this->fontsettings['font-size']); // $draw->setGravity(Imagick::GRAVITY_WEST); $lines = substr_count($this->text, "\n"); $lines+=1; $fm = $image->queryFontMetrics($draw, $this->text, true); $min_y = min(array($fm["boundingBox"]["y2"],$fm["boundingBox"]["y1"])); $max_y = max(array($fm["boundingBox"]["y2"],$fm["boundingBox"]["y1"])); $width = $fm["textWidth"]+($this->fontsettings['shadow-distance']+((int)$this->fontsettings['shadow-spread']*(int)$this->fontsettings['shadow-spread'])); $height = $max_y+abs($min_y)+($this->fontsettings['shadow-distance']+(int)$this->fontsettings['shadow-spread']); $height < $fm["textHeight"] ? $height = $fm["textHeight"]+($this->fontsettings['shadow-distance']+(int)$this->fontsettings['shadow-spread']) : 0; $firstchar = substr($this->text, 0, 1); $fcm = $image->queryFontMetrics($draw, $firstchar); $min_x = min(array($fcm["boundingBox"]["x2"],$fcm["boundingBox"]["x1"])); $x = abs($min_x)+((int)$this->fontsettings['shadow-spread']-1); $y = $max_y; $image->newImage($width, $height, "transparent", "png"); if($this->fontsettings['shadow']){ $shadow = new ImagickDraw(); $shadow->setFillColor(new ImagickPixel("#".$this->fontsettings['shadow-color'])); $shadow->setFont(ANYFONT_FONTDIR."/".$this->fontsettings['font-name'].$this->fonttype); $shadow->setFontSize($this->fontsettings['font-size']); // $shadow->setGravity(Imagick::GRAVITY_WEST); $image->annotateImage($shadow, ($x+$this->fontsettings['shadow-distance']),($y+$this->fontsettings['shadow-distance']), 0, $this->text); $image->blurImage(0, (int)$this->fontsettings['shadow-spread']); } $image->annotateImage($draw, $x, $y, 0, $this->text); $image->writeImage($this->cache_file); if(file_exists($this->cache_file)){ self::fetchImage(); } } /** Description * Fetches the image from cache and delivers it to the browser along with the required headers. * @return PNG image */ private function fetchImage(){ $image = !$this->gzip ? file_get_contents($this->cache_file) : gzencode(file_get_contents($this->cache_file)); header('X-Generated-By: AnyFont for WordPress'); $this->gzip ? header('Content-encoding: gzip') : 0; header('Content-type: image/png'); header('Content-length: '.strlen($image)); header('Expires: '.$this->expiryTime); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($this->cache_file)).' GMT'); header('Etag: "'.$this->etag.'"'); print($image); } } ?>