PHP計(jì)算字符串真正的寬度和高度像素(圖片加文字水印示例)
PHP計(jì)算字符串用strlen()只能得到字符串長(zhǎng)度,不是寬高像素,使用到了php函數(shù)ImageTTFBBox(),就可以根據(jù)字體的大小和所用字體計(jì)算字符串的寬高像素。
ImageTTFBBox函數(shù)介紹
imagettfbbox() 計(jì)算并返回一個(gè)包圍著 TrueType 文本范圍的虛擬方框的像素大小。
語(yǔ)法
imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
參數(shù)
參數(shù) | 必需的 | 描述 |
---|---|---|
size | 是 | 像素單位的字體大小。 |
angle | 是 | text 將被度量的角度大小。 |
fontfile | 是 | TrueType 字體文件的文件名(可以是 URL)。根據(jù) PHP 所使用的 GD 庫(kù)版本,可能?chē)L試搜索那些不是以 '/' 開(kāi)頭的文件名并加上 '.ttf' 的后綴并搜索庫(kù)定義的字體路徑。 |
text | 是 | 要度量的字符串。 |
返回值
返回一個(gè)含有 8 個(gè)單元的數(shù)組表示了文本外框的四個(gè)角:
- 0 左下角 X 位置
- 1 左下角 Y 位置
- 2 右下角 X 位置
- 3 右下角 Y 位置
- 4 右上角 X 位置
- 5 右上角 Y 位置
- 6 左上角 X 位置
- 7 左上角 Y 位置
這些點(diǎn)是相對(duì)于文本的而和角度無(wú)關(guān),因此“左上角”指的是以水平方向看文字時(shí)其左上角。
本函數(shù)同時(shí)需要 GD 庫(kù)和 FreeType 庫(kù)。
圖片加文字水印示例
<?php //指定圖片路徑 $img = trim($_POST['img']); //獲取圖片信息 $info = getimagesize($img); //獲取圖片擴(kuò)展名 $type = image_type_to_extension($info[2],false); //動(dòng)態(tài)的把圖片導(dǎo)入內(nèi)存中 $fun = "imagecreatefrom{$type}"; $image = $fun($img); //指定字體類型 $font = '../ttfs/pingfang.ttf'; //指定字體顏色及透明度 $trans = intval($_POST['trans']); //水印字體的透明度 $color =imagecolorallocatealpha($image,255,255,0,$trans); //指定字體內(nèi)容及大小 $content= trim($_POST['content']); $size= intval($_POST['size']); //計(jì)算字符串寬高 $pos =imagettfbbox($size,0,$font, $content); //字符串所占寬度 $str_width = $pos[2] -$pos[0]; //字符串所占高度 $str_height = $pos[5] -$pos[3]; //給圖片添加文字 $location =intval($_POST['location']); //水印的位置 switch ( $location ) { case 1://左上角 imagettftext($image, $size, 0, 10,10+$size, $color, $font, $content); break; case 2://右上角 imagettftext($image, $size, 0,$width-$str_width-10, 10+$size,$color, $font,$content); break; case 3://左下角 imagettftext($image,$size, 0, 10,$height-10, $color, $font, $content); break; case4://右下角 imagettftext($image, $size, 0,$width-$str_width-10,$height-10, $color, $font,$content); break; case 5://正中心 imagettftext($image, $size, 0,$width/2-$str_width/2,$height/2-$str_height/2, $color, $font,$content); break; default: imagettftext($image, 30, 0, 100, 100,$color, $font, $content); break; } //創(chuàng)建存放圖片的文件夾 $lujing ='../attachment/images/'; if ( !is_dir( $lujing ) ) { mkdir($lujing, 0777,true); } //保存合成后的圖片 imagejpeg($image,$lujing.'photo_'.time().'.jpg'); //銷毀圖片 imagedestroy($image);
到此這篇關(guān)于PHP計(jì)算字符串真正的寬度和高度像素(圖片加文字水印示例)的文章就介紹到這了,更多相關(guān)PHP字符串寬高內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP中防止SQL注入攻擊和XSS攻擊的兩個(gè)簡(jiǎn)單方法
所有有打印的語(yǔ)句如echo,print等 在打印前都要使用htmlentities() 進(jìn)行過(guò)濾,這樣可以防止Xss,注意中文要寫(xiě)出htmlentities2010-04-04php數(shù)據(jù)結(jié)構(gòu)與算法(PHP描述) 查找與二分法查找
php數(shù)據(jù)結(jié)構(gòu)與算法(PHP描述) 查找與二分法查找,需要的朋友可以參考下2012-06-06安裝ImageMagick出現(xiàn)error while loading shared libraries的解決方法
這篇文章主要介紹了安裝ImageMagick出現(xiàn)error while loading shared libraries的解決方法,是ImageMagick安裝與運(yùn)行中經(jīng)常出現(xiàn)的問(wèn)題,需要的朋友可以參考下2014-09-09PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
這篇文章主要介紹了PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法,結(jié)合實(shí)例形式分析了php常見(jiàn)時(shí)間戳轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-03-03