PHP计算字符串真正的宽度和高度像素(图片加文字水印示例)
时间:2023-05-28 06:48:44
PHP计算字符串用strlen()只能得到字符串长度,不是宽高像素,使用到了php函数ImageTTFBBox(),就可以根据字体的大小和所用字体计算字符串的宽高像素。
ImageTTFBBox函数介绍
imagettfbbox() 计算并返回一个包围着 TrueType 文本范围的虚拟方框的像素大小。
语法
imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
参数
参数 | 必需的 | 描述 |
---|---|---|
size | 是 | 像素单位的字体大小。 |
angle | 是 | text 将被度量的角度大小。 |
fontfile | 是 | TrueType 字体文件的文件名(可以是 URL)。根据 PHP 所使用的 GD 库版本,可能尝试搜索那些不是以 '/' 开头的文件名并加上 '.ttf' 的后缀并搜索库定义的字体路径。 |
text | 是 | 要度量的字符串。 |
返回值
返回一个含有 8 个单元的数组表示了文本外框的四个角:
0 左下角 X 位置
1 左下角 Y 位置
2 右下角 X 位置
3 右下角 Y 位置
4 右上角 X 位置
5 右上角 Y 位置
6 左上角 X 位置
7 左上角 Y 位置
这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
本函数同时需要 GD 库和 FreeType 库。
图片加文字水印示例
<?php
//指定图片路径
$img = trim($_POST['img']);
//获取图片信息
$info = getimagesize($img);
//获取图片扩展名
$type = image_type_to_extension($info[2],false);
//动态的把图片导入内存中
$fun = "imagecreatefrom{$type}";
$image = $fun($img);
//指定字体类型
$font = '../ttfs/pingfang.ttf';
//指定字体颜色及透明度
$trans = intval($_POST['trans']); //水印字体的透明度
$color =imagecolorallocatealpha($image,255,255,0,$trans);
//指定字体内容及大小
$content= trim($_POST['content']);
$size= intval($_POST['size']);
//计算字符串宽高
$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;
}
//创建存放图片的文件夹
$lujing ='../attachment/images/';
if ( !is_dir( $lujing ) )
{
mkdir($lujing, 0777,true);
}
//保存合成后的图片
imagejpeg($image,$lujing.'photo_'.time().'.jpg');
//销毁图片
imagedestroy($image);
标签:PHP,字符串宽高,文字水印
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python如何通过实例方法名字调用方法
2021-04-24 09:00:31
在Django中Pyecharts生成图表实现
2023-07-27 08:16:32
![](https://img.aspxhome.com/file/2023/4/105404_0s.png)
单点登录之cas集成sonar的配置方法
2022-01-17 00:45:58
![](https://img.aspxhome.com/file/2023/0/132320_0s.jpg)
基于Vue3实现日历组件的示例代码
2024-05-29 22:25:16
Python Matplotlib绘制扇形图标签重叠问题解决过程
2022-06-27 05:22:48
![](https://img.aspxhome.com/file/2023/5/103625_0s.png)
js 获取图像缩放后的实际宽高,位置等信息
2024-05-22 10:41:09
go语言中值类型和指针类型的深入理解
2024-04-28 09:18:29
基于pandas向csv添加新的行和列
2021-11-29 02:28:56
![](https://img.aspxhome.com/file/2023/1/79501_0s.png)
Sublime开发python程序的示例代码
2023-11-06 09:45:46
很好用的PHP数据库类
2024-05-11 09:52:10
mysql启用skip-name-resolve模式时出现Warning的处理办法
2024-01-25 09:38:44
python实现截取屏幕保存文件,删除N天前截图的例子
2021-09-19 18:13:49
详解Python 定时框架 Apscheduler原理及安装过程
2021-06-16 15:15:09
![](https://img.aspxhome.com/file/2023/1/127811_0s.png)
Python中关于函数的具体用法范例以及介绍
2023-06-04 19:48:28
![](https://img.aspxhome.com/file/2023/1/63261_0s.png)
Django文件存储 自己定制存储系统解析
2023-09-17 13:06:25
MySQL外键设置的方法实例
2024-01-19 14:10:42
![](https://img.aspxhome.com/file/2023/9/79029_0s.png)
Oracle中的table()函数使用
2024-01-19 14:50:10
详解OpenCV-Python Bindings如何生成
2021-03-26 17:33:52
OpenCV基于ORB算法实现角点检测
2021-08-20 03:08:13
![](https://img.aspxhome.com/file/2023/6/127806_0s.jpg)
vue中的ref和$refs的使用
2024-05-13 09:08:44