【PHP】TP使用Intervention\Image在图片上绘制矩形、文字
CrazyPanda发表于:2024-04-12 14:54:19浏览:364次
1. 在图片上绘制矩形
use Intervention\Image\ImageManagerStatic as Image; public function drawRectangle() { $image = Image::make('path/to/your/image.jpg'); // 替换为你的图片路径 // 设置矩形的颜色和填充 $color = '#ff0000'; // 矩形的颜色 $alpha = 50; // 颜色的透明度 (0-100) // 设置矩形的位置和大小 $x = 100; // 矩形左上角的x坐标 $y = 100; // 矩形左上角的y坐标 $width = 200; // 矩形的宽度 $height = 100; // 矩形的高度 // 绘制矩形 $image->rectangle( $x, // 矩形左上角x坐标 $y, // 矩形左上角y坐标 $x + $width, // 矩形右下角x坐标 $y + $height, // 矩形右下角y坐标 $color, // 矩形颜色 $alpha // 矩形颜色的透明度 ); // 保存修改后的图片或输出 $image->save('path/to/save/modified_image.jpg'); // 保存到服务器 // 或者输出到浏览器 return $image->response('jpeg'); }
2. 在图片上绘制文本框,并输入文字
use Intervention\Image\ImageManagerStatic as Image; // 初始化ImageManager $imageManager = new Image(); // 读取原始图片 $image = $imageManager->make('path/to/your/image.jpg'); // 设置字体文件路径 $fontPath = 'path/to/your/font.ttf'; // 设置文本样式 $text = 'Your Text Here'; $fontSize = 20; // 字体大小 $fontColor = '#000000'; // 字体颜色 $textBoxBackground = '#FFFFFF'; // 文本框背景颜色 $padding = 10; // 文本框内边距 // 计算文本宽度和高度 $textBoxWidth = $fontSize * (strlen($text) + 1); $textBoxHeight = $fontSize + $padding * 2; // 绘制文本框 $x = 10; // 文本框左上角的x坐标 $y = 10; // 文本框左上角的y坐标 $image->rectangle($x, $y, $x + $textBoxWidth, $y + $textBoxHeight, function ($draw) use ($textBoxBackground) { $draw->background($textBoxBackground); }); // 在文本框内填写文字 $image->text($text, $x + $padding, $y + $padding, function ($font) use ($fontPath, $fontSize, $fontColor) { $font->file($fontPath); $font->size($fontSize); $font->color($fontColor); $font->align('left'); $font->valign('top'); }); // 保存或输出图片 $image->save('path/to/save/image.jpg'); // 或者直接输出到浏览器 // $image->response('jpg');
效果图如下
可是文字不会换行,会超出范围。
3.在图片上绘制多行文本
<?php use Intervention\Image\ImageManagerStatic as Image; // 初始化ImageManager $imageManager = new Image(); // 加载背景图片 $background = $imageManager->make('path/to/your/background.jpg'); // 设置字体文件路径 $fontPath = 'path/to/your/font.ttf'; // 设置字体大小和颜色 $fontSize = 20; $fontColor = '#000000'; // 要绘制的文本 $text = "这是第一行文本。\n这是第二行文本。\n这是第三行文本。"; // 计算文本的高度和宽度 $lineHeight = $fontSize + 5; // 假设行高是字体大小加5 $width = 200; // 假设的最大宽度 // 初始化当前绘制位置 $x = 10; // 水平位置 $y = 20; // 垂直位置 // 分割文本为多行 $textLines = explode("\n", $text); // 开始绘制文本 foreach ($textLines as $line) { // 绘制单行文本 $background->text($line, $fontPath, $x, $y, function($font) use ($fontSize, $fontColor) { $font->file($fontPath); $font->size($fontSize); $font->color($fontColor); $font->align('left'); $font->valign('top'); }); // 更新绘制位置 $y += $lineHeight; } // 保存或输出图片 $background->save('path/to/save/result.jpg'); ?>
也可以自己计算文本长度,换行显示,自定义文本剪切方法:
/** * @param $text 文本内容 * @param $width 总宽度 * @param $fontsize 字体大小 * @return array */ public function getTextLine($text,$width,$fontsize) { $res = []; $length = mb_strlen($text,'utf-8') + 1; if (round($length * $fontsize) <= $width) { $res[] = $text; } else { $count = round($width / $fontsize,2); $count = $count < 1 ? 1 : intval($count); $len = 0; while ($len <= $length) { $res[] = mb_substr($text,$len,$count); $len += $count; } } return $res; }
可以达到竖排显示的效果。当然,Intervention\Image有直接竖排显示文字的方法。
4. 文本竖排显示
图片上绘制竖排显示的文字,可以使用imagettftext()函数。
use Intervention\Image\ImageManagerStatic as Image; public function drawTextOnImage($imagePath, $text, $fontPath, $x, $y) { // 初始化Image对象 $image = Image::make($imagePath); // 获取图片的宽度,这里假设你想要文字垂直居中 $width = $image->width(); // 设置文字的样式和大小 $fontSize = 20; // 字体大小 $color = '#000000'; // 字体颜色 $angle = 0; // 文字角度 // 计算文字的高度 $fontBox = Image::font($fontPath, $fontSize, $text, true); $textHeight = $fontBox->height(); // 绘制文字 $image->text($text, $x, $y, function($font) use ($fontPath, $fontSize, $color, $angle) { $font->file($fontPath); $font->size($fontSize); $font->color($color); $font->angle($angle); }); // 返回图片资源 return $image->response('jpg'); } // 使用示例 $imagePath = 'path/to/your/image.jpg'; // 图片路径 $text = "这是竖排文字"; // 需要绘制的文字 $fontPath = 'path/to/your/font.ttf'; // 字体文件路径 $x = 0; // 文字起始点的横坐标,可以根据需要调整 $y = 50; // 文字起始点的纵坐标,可以根据需要调整 // 调用函数绘制文字 drawTextOnImage($imagePath, $text, $fontPath, $x, $y);
猜你喜欢
- 【PHP】php常见的集群有哪些
- php常见的集群有LAMP集群、Nginx集群、Memcached集群、Redis集群和Hadoop集群。详细介绍:1、LAMP集群,LAMP是指Linux、Apache、MySQL和PHP的组合,是一种常见的PHP开发环境,在LAMP集群中,多个服务器运行相同的应用程序,并通过负载均衡器将请求分发到不同的服务器上;2、Nginx集群,Nginx是一种高性能的Web服务器等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。PHP是一种广泛使用的服务
- 【PHP】RestFul简介和使用
- 1.1 RestFul简介REST全称是(Resource) Representational State Transfer,翻译过来为“资源代表状态转移”,中文意思是表述性状态转移。它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则,不是标
- 【PHP】php有哪些爬虫模块类型
- hp爬虫模块类型有cURL、Simple HTML DOM、Goutte、PhantomJS、Selenium等等。详细介绍:1、cURL,可以模拟浏览器行为轻松地获取网页内容;2、Simple HTML DOM,可以通过CSS选择器或XPath表达式来定位和提取HTML元素,方便地从网页中提取所需的数据;3、Goutte可以发送HTTP请求、处理Cookie、处理表单等等。本教程操作系统:Windows10系统、PHP8.1.3版本、Dell G3电脑。PHP作为一种流行的编程语言,具有强大
- 【PHP】PHP8如何优化代码性能
- PHP8的新特性和底层开发原理探索:如何优化代码性能随着互联网的迅猛发展和信息技术的不断更新,PHP作为一门重要的互联网开发语言也在不断演进。PHP8作为最新版本,带来了许多全新的特性和改进,同时也提供了更强大的底层开发能力。本文将探讨PHP8的新特性,并给出一些代码示例,展示如何优化代码性能。JIT编译器PHP8引入了Just-In-Time(即时编译)编译器。JIT编译器可以将PHP代码动态地编译成本地机器码,从而提高代码执行的效率。在PHP8中,JIT编译器默认是关闭的,需要手动启用。下面
- 【PHP】TP上传图片到OSS
- 准备:php版本:7.4tp版本:6.0阿里云accessKeyId;阿里云accessKeySecret;阿里云存储bucket名称,如 examplebucket;地域节点endpoint,如:oss-cn-hangzhou.aliyuncs.com;1. 安装SDK参考官网https://help.aliyun.com/zh/oss/developer-reference/installation-13?spm=a2c4g.11186623.0.0.568f6583XllxTu
- 【PHP】PHP接入微信官方支付(native·APIv3)
- 一、项目介绍两个文件实现微信官方支付(native·APIv3)的发起支付和回调应答功能二、准备资料商户号:需要使用到营业执照注册商户appid:小程序或者订阅号的appidAPIv3秘钥:32位秘钥,APIv2秘钥为16位,不要混淆证书序号:apiclient_key.pem文件中的秘钥,需要将该文件改为txt后缀,然后获取其中的秘钥三、支付代码1.index.php文件<?php //支付配置 $mchid = '';//微信支付商户号 P
- 【PHP】php中实现3DES算法(ECB加密模式PKCS5Padding填充)
- 讲道理,一提到3DES算法,首先想到的是要和java做交互了==现在3DES已经渐渐被抛弃了,尤其是ECB加密模式使用的更少了,但是没办法,业务需要,合作方用的是他,你头再铁也不能怎样,那就扒扒文档咯网上完整的php实现以经不多了,CBC加密模式居多,所以我参考了好几篇文章,整理了一个class出来,共享上来,避免后来人踩坑感谢前人的整理总结:PHP版3DES加解密类更新成PKCS5填充模式 (http://blog.163.com/hui\_san/blog/static/5710286720
- 【PHP】php 对比2个数组是否一样
- 在 PHP 中,可以使用 array_diff 和 array_intersect 函数来比较两个数组是否相同。同时,还可以使用 == 或 === 运算符来比较两个数组是否相等。array_diff 函数array_diff 函数可以比较两个数组的差集,即找出在第一个数组中出现的元素,但是在第二个数组中不存在的元素。示例代码:$array1 = array(1, 2, 3); $array2 = array(1, 3