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);


猜你喜欢
- 首先介绍一下import和include的区别或者说import相对include的好处:import导入的内容只会被包含一次,在引入之前会
- 在进行PHP编程时,需要对服务器某个目录下面的文件进行浏览,通常成为遍历目录。取得一个目录下的文件和子目录,就需要用到opendir()函数
- 准备必须环境:Python3开始先实现一个简单的版本,直接上代码:import urllib.requestimport urllib.er
- 如下所示:# -*- coding: utf-8 -*-import sysfrom PySide.QtGui import *from P
- Python时间戳操作很多,每次用点时候总是去查,查的麻烦,现在自己也好好归纳一下。我现在刚好有个需求需要获取当天零点时间戳,但是网上查的大
- Python中会遇到很多关于排序的问题,今天小编就带给大家实现插入排序的方法。在Python中插入排序的基本原理类似于摸牌,将摸起来的牌插入
- windows版本下需要先安装ffmpeg工具:1:先下载指定(https://ffmpeg.zeranoe.com/builds/) 有S
- 前言昨天因为小程序功能要获取小程序程序码,看了微信文档爬了好多坑。(留一下记录以防后面被坑)操作因为我获取到了微信那里的图片的图片流一直不知
- 在windows下安装Mysql系统日志出现max_open_files: 2048 max_connections: 510 table_
- 1 Video介绍引用我翻译文档《在HTML5页面中嵌入音频和视频》中的介绍文字:“当今,在网页上嵌入视频且所有用户不管使用任何浏览器或者操
- c#连接sqlserver、插入数据、从数据库获取时间using System;using System.Data.SqlClient;na
- 不过有一个简单的执行cmd命令方法: SQL> host net user User accounts for \\PC-ATQHJ4
- 后台管理配置动态路由菜单前段时间做一个后台管理项目,因为超级管理员可以给普通管理员动态更改权限,所以vue-element-admin里的写
- 你是否发现,在浩如烟海的应用程序堆里,具有漂亮图标和清爽名字的 App 更容易被用户喜爱。作为开发者,面对这自己的作品,能否自问一句:“从图
- 1、创建数组 var array = new Array(); var array = new Array(size);//指定数组的长度
- 1. 将Oracle 10g client安装包copy到本地才能安装:2. 双击setup 的到:3. 稍后进入安装界面:4. 选择下一步
- 如下所示:#-*- coding:utf-8 -*-import numpy as npimport matplotlib.pyplot a
- 发送邮件概述:Django中内置了邮件发送功能,发送邮件需要使用SMTP服务,常用的免费服务器有:163、126、QQ注册并登陆163邮箱打
- window.onload 是页面全部加载完成,包括图片、CSS、JavaScript等。但加载JavaScript的方法有很多种
- 下面这段代码能够显示,当前用户所能够看到的所有的用户和表有兴趣的, 可以把每个表的内容加上<% Dim objOraSess