php實(shí)現(xiàn)在限定區(qū)域里自動(dòng)調(diào)整字體大小的類(lèi)實(shí)例
本文實(shí)例講述了php實(shí)現(xiàn)在限定區(qū)域里自動(dòng)調(diào)整字體大小的類(lèi)。分享給大家供大家參考。具體如下:
這里的php類(lèi)imagefittext.class.php實(shí)現(xiàn)在限定的區(qū)域里自動(dòng)調(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); } ?>
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
- php技術(shù)實(shí)現(xiàn)加載字體并保存成圖片
- 支持中文字母數(shù)字、自定義字體php驗(yàn)證碼代碼
- PHP+FFMPEG實(shí)現(xiàn)將視頻自動(dòng)轉(zhuǎn)碼成H264標(biāo)準(zhǔn)Mp4文件
- php上傳文件中文文件名亂碼的解決方法
- php使用fopen創(chuàng)建utf8編碼文件的方法
- php格式文件打開(kāi)的四種方法
- PHP開(kāi)發(fā)之歸檔格式phar文件概念與用法詳解【創(chuàng)建,使用,解包還原提取】
- php簡(jiǎn)單讀取.vcf格式文件的方法示例
- PHP獲取ttf格式文件字體名的方法示例
相關(guān)文章
PHP常用設(shè)計(jì)模式之委托設(shè)計(jì)模式
委托是對(duì)一個(gè)類(lèi)的功能進(jìn)行擴(kuò)展和復(fù)用的方法。它的做法是:寫(xiě)一個(gè)附加的類(lèi)提供附加的功能,并使用原來(lái)的類(lèi)的實(shí)例提供原有的功能,接下來(lái)通過(guò)本文給大家介紹PHP委托設(shè)計(jì)模式實(shí)例詳解,感興趣的朋友一起學(xué)習(xí)吧2016-02-02PHP使用redis消息隊(duì)列發(fā)布微博的方法示例
這篇文章主要介紹了PHP使用redis消息隊(duì)列發(fā)布微博的方法,結(jié)合具體實(shí)例形式分析了php結(jié)合redis數(shù)據(jù)庫(kù)操作消息隊(duì)列實(shí)現(xiàn)微博發(fā)布的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06PHP中將一個(gè)字符串部分字符用星號(hào)*替代隱藏的實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP中將一個(gè)字符串部分字符用星號(hào)*替代隱藏的實(shí)現(xiàn)代碼,有時(shí)候我們需要將部分內(nèi)容隱藏那么就可能需要下面的代碼了,需要的朋友可以參考下2019-09-09- 上次對(duì)于 MySQL 方面已經(jīng)有的一些總結(jié),但是昨晚 wiLdGoose 兄說(shuō)他也碰到同樣的問(wèn)題,但是無(wú)法解決。結(jié)果經(jīng)過(guò)種種的假設(shè)和判斷以后,到最后發(fā)現(xiàn)原來(lái)是 Zend Studio 的時(shí)區(qū)配置問(wèn)題(我狂汗ing)。而在和他討論期間也談到了很多關(guān)于 MySQL 的細(xì)節(jié)問(wèn)題,還是記錄一下當(dāng)作備忘比較好。這篇文章同時(shí)也做說(shuō)服 wiLdGoose 兄用。2008-03-03
php無(wú)限級(jí)分類(lèi)實(shí)現(xiàn)方法分析
這篇文章主要介紹了php無(wú)限級(jí)分類(lèi)實(shí)現(xiàn)方法,結(jié)合2個(gè)簡(jiǎn)單實(shí)例形式分析了php通過(guò)遞歸與普通算法實(shí)現(xiàn)無(wú)限級(jí)分類(lèi)的相關(guān)操作技巧,需要的朋友可以參考下2016-10-10PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04