溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP如何計(jì)算字符串真正的寬度和高度像素

發(fā)布時(shí)間:2023-02-25 11:39:20 來(lái)源:億速云 閱讀:149 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“PHP如何計(jì)算字符串真正的寬度和高度像素”,在日常操作中,相信很多人在PHP如何計(jì)算字符串真正的寬度和高度像素問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”P(pán)HP如何計(jì)算字符串真正的寬度和高度像素”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

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像素單位的字體大小。
angletext 將被度量的角度大小。
fontfileTrueType 字體文件的文件名(可以是 URL)。根據(jù) PHP 所使用的 GD 庫(kù)版本,可能嘗試搜索那些不是以 '/' 開(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ì)算字符串真正的寬度和高度像素”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI