-
PHP计算字符串真正的宽度和高度像素(图片加文字水印示例)
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);
出处:http://www.phpfensi.com/php/20230627/22932.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式