PHP计算字符串真正的宽度和高度像素(图片加文字水印示例)
发布时间:2023-05-28 06:48:44
标签: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);
0
投稿
猜你喜欢
- 代码如下:<% '/* 函数名称:Zxj_ReplaceHtmlClearHtml '/
- 如何做一个随机密码产生器?<%genPassword = ""RandomizeFor&nbs
- 受<! #include file="filename.asp" --> 宏限制必须存在该文件并且会预先编译
- 代码如下:'返回某年总共有多少天 Function DayOfYear(ByVal y) DayOfYear = DatePart(
- 写任何编程代码,不同的开发者都会有不同的见解。但参考一下总是好的,下面是来自 Javascript Toolbox 发布的 14条最佳JS代
- 关于asp缓存函数,类什么的,在网上可以说笔笔皆是,为啥我要不辞辛苦去写一个呢?大概看了下,各有各的优点吧,可是大部分好像不可以缓存数据额,
- 此文章主要向大家描述的是MySQL高级查询方法之记录查询的实际操作步骤,以及对其实际操作过程中要用到的代码的详细描述,以下就是文章的主要内容
- 这是一个网页设计中经常会用到的图片特效,实现多个图片之间的轮换,并分别带有连接。以前的代码只能适用于IE,在FF下始终没有得到很好的解决今天
- 由于工作对人的眼球和精神都会带来一定的疲劳,所以在界面设计中,希望用户能够准确的关注重要的信息,而不因为用户的长期使用而流失信息。最近在看《
- 问题:如何把具有相同字段的记录删除,只留下一条。 例如:表test里有id,name字段,如果有name相同的记录只留下一条,
- 星爷的一部“国产007”应该是无人不晓,其中一个片段是将“007”向MM展示他的秘密武器。皮鞋可以吹头发,大哥大可以刮胡子……把真实功能隐蔽
- 集群是一种实现高可用性的有效解决方案,有时它会适得其反。而且,它还非常昂贵。因此,数据库管理员可使用日志转移代替集群来提供较高的可用性。日志
- ChatGPT 是 OpenAI 开发的 GPT(Generative Pre-trained Transformer)语言模型的变体。它是
- 网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live Search 9
- 实现原理:将用户信息保存在数据库中,若能在数据库中检索到用户输入的姓名和口令,就允许访问该一页面。代码如下:protect.asp<h
- 动态加载JavaScript文件和CSS资源为Web前端开发提供了巨大的灵活性,同时也实现了lazy load和按需加载,相比XMLHttp
- <title>:一个优质网页最重要的元素HTML 中的 <title> 元素用于在下列情况中提供一小段能够代表该网页
- 研究网页编码很长时间了,因为最近要设计一个友情链接检测的VBS脚本,而与你链接的人的页面很可能是各种编码,以前采取的方法是:如果用GB231
- 1,exists和in的理解exists:如果子查询中包括某一行,那么就为TRUE in:如果操作数为TRUE等于表达式列表中的一个,那么就
- 本站收集的js实现的同步动态显示当前日期,时间和星期几的代码,我经常用在自己做的企业网站的后台,方便嘛。效果可以看看本站的首页,呵呵!而且代