php實(shí)現(xiàn)在限定區(qū)域里自動調(diào)整字體大小的類實(shí)例
更新時間:2015年04月02日 15:46:14 作者:pythoner
這篇文章主要介紹了php實(shí)現(xiàn)在限定區(qū)域里自動調(diào)整字體大小的類,實(shí)例分析了php操作圖片及字體的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了php實(shí)現(xiàn)在限定區(qū)域里自動調(diào)整字體大小的類。分享給大家供大家參考。具體如下:
這里的php類imagefittext.class.php實(shí)現(xiàn)在限定的區(qū)域里自動調(diào)整字體大小的功能。
<?php // Image Fit Text Class 0.1 by ming0070913 CLASS ImageFitText{ public $font, $fontsize, $width, $height; public $step_wrap, $step_fontsize; public function __construct($font, $step_wrap=1, $step_fontsize=1){ $this->font = $font; $this->step_wrap = $step_wrap>1?$step_wrap:1; $this->step_fontsize = $step_fontsize>1?$step_fontsize:1; } function fit($width, $height, $text, $fontsize, $min_fontsize=5, $min_wraplength=0){ $this->fontsize = & $fontsize; $text_ = $text; while($this->TextHeight($text_)>$height && $fontsize>$min_fontsize) $fontsize -= $this->step_fontsize; while(($this->TextWidth($text_)>$width || $this->TextHeight($text_)>$height) && $fontsize>$min_fontsize){ $fontsize -= $this->step_fontsize; $wraplength = $this->maxLen($text); $text_ = $text; while($this->TextWidth($text_)>$width && $wraplength>=$min_wraplength+$this->step_wrap){ $wraplength -= $this->step_wrap; $text_ = wordwrap($text, $wraplength, "\n", true); //To speed up: if($this->TextHeight($text_)>$height) break; if($wraplength<=$min_wraplength) break; $wraplength_ = $wraplength; $wraplength = ceil($wraplength/($this->TextWidth($text_)/$width)); $wraplength = $wraplength<($min_wraplength+$this->step_wrap)?($min_wraplength+$this->step_wrap):$wraplength; } } $this->width = $this->TextWidth($text_); $this->height = $this->TextHeight($text_); return array("fontsize"=>$fontsize, "text"=>$text_, "width"=>$this->width, "height"=>$this->height); } function maxLen($text){ $lines = explode("\n", str_replace("\r", "", $text)); foreach($lines as $line) $t[] = strlen($line); return max($t); } function TextWidth($text){ $t = imagettfbbox($this->fontsize, 0, $this->font, $text); return $t[2]-$t[0]; } function TextHeight($text){ $t = imagettfbbox($this->fontsize, 0, $this->font, $text); return $t[1]-$t[7]; } } ?>
使用范例如下:
<?php // Image Fit Text Class 0.1 by ming0070913 // Example File include "imagefittext.class.php"; // Settings : // The text $text = "PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. If you are new to PHP and want to get some idea of how it works, try the introductory tutorial. After that, check out the online manual."; // The maximun width $width = 200; // The maximun height $height = 100; // Position of the text and the box $x1 = 50; $y1 = 50; // The starting font size $fontsize = 10; // The minimun font size. The script will stop if it cannot fit the text even with this size. $min_fontsize = 3; // The minimun wrap length for each line. The script will try another font size if it cannot fit the text even with this wrap length. $min_wraplength = 0; // The font $font = "arial.ttf"; // The space between the box and the text. It's independent to the script which can be ignored $padding = 3; // If the script cannot fit the text for certain wrap length, it will try the wrap length again with the reduction in this value. // It reduce the accuracy, but will slightly speed up the process. $step_wrap = 1; // If the script cannot fit the text for certain font size, it will try the the font size again with the reduction in this value. // It reduce the accuracy, but will slightly speed up the process. $step_fontsize = 1; // Create a image $im = @imagecreatetruecolor($width+$x1*2, $height+$y1*2+80) or die('Cannot Initialize new GD image stream'); // Start the timer $time_start = microtime_float(); // The class $imagefittext = new ImageFitText($font, $step_wrap, $step_fontsize); // Fit the text // It returns the result in a array with "fontsize", "text", "width", "height" $fit = $imagefittext->fit($width-$padding*2, $height-$padding*2, $text, $fontsize, $min_fontsize, $min_wraplength); // Stop the timer $time = round(microtime_float()-$time_start, 3); $white = imagecolorallocate($im, 255, 255, 255); // Draw a box imagerectangle($im, $x1, $y1, $x1+$width, $y1+$height, $white); // Write the text +8 because the text will move up originally imagettftext($im, $fit['fontsize'], 0, $x1+$padding, $y1+$padding+8, $white, $font, $fit['text']); // Print some info. about the text imagestring($im, 5, $x1, $y1+$height+30, 'Fontsize : '.$fit['fontsize'], $white); imagestring($im, 5, $x1, $y1+$height+45, 'Text Size : '.$fit['width']."x".$fit['height'], $white); imagestring($im, 5, $x1, $y1+$height+60, 'Box Size : '.($width-$padding*2)."x".($height-$padding*2), $white); imagestring($im, 5, $x1, $y1+$height+75, 'Time used : '.$time.'s', $white); // Print the image header ('Content-Type: image/png'); imagepng($im); imagedestroy($im); function microtime_float(){ // Timer list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } ?>
希望本文所述對大家的php程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP常用設(shè)計(jì)模式之委托設(shè)計(jì)模式
委托是對一個類的功能進(jìn)行擴(kuò)展和復(fù)用的方法。它的做法是:寫一個附加的類提供附加的功能,并使用原來的類的實(shí)例提供原有的功能,接下來通過本文給大家介紹PHP委托設(shè)計(jì)模式實(shí)例詳解,感興趣的朋友一起學(xué)習(xí)吧2016-02-02PHP使用redis消息隊(duì)列發(fā)布微博的方法示例
這篇文章主要介紹了PHP使用redis消息隊(duì)列發(fā)布微博的方法,結(jié)合具體實(shí)例形式分析了php結(jié)合redis數(shù)據(jù)庫操作消息隊(duì)列實(shí)現(xiàn)微博發(fā)布的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06PHP中將一個字符串部分字符用星號*替代隱藏的實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP中將一個字符串部分字符用星號*替代隱藏的實(shí)現(xiàn)代碼,有時候我們需要將部分內(nèi)容隱藏那么就可能需要下面的代碼了,需要的朋友可以參考下2019-09-09PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04