您的当前位置:首页>全部文章>文章详情

【PHP】TP使用Intervention\Image在图片上绘制矩形、文字

CrazyPanda发表于:2024-04-12 14:54:19浏览:376次TAG:

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

效果图如下

image.png

可是文字不会换行,会超出范围。


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】Laravel的生命周期面试
在Laravel框架中,生命周期(Lifecycle)指的是从请求到达应用到应用响应请求的一系列过程。这个过程包括了从路由解析到最终视图渲染或响应发送的一系列中间件、控制器逻辑和事件处理。理解Laravel的生命周期对于开发高质量、可维护的应用至关重要。下面是一些关键的环节和概念,可以帮助你准备Laravel生命周期的面试:
发表于:2025-03-20 浏览:48 TAG: #php #laravel
【PHP】使用intervention/image给图片添加文字和图片
准备使用composer安装composer&nbsp;require&nbsp;intervention/image我安装的版本是2.7一、 给图片添加文字use&nbsp;Intervention\Image\ImageManagerStatic&nbsp;as&nbsp;Image; &nbsp; public&nbsp;function&nbsp;addTextToImage($imagePath,&nbsp;$text,&nbsp;$fontPath,&nbsp;$x&nbsp;=&amp;n
发表于:2024-04-02 浏览:282 TAG:
【PHP】PHP8.0中的匿名函数
hp8.0是当前最新版本的php编程语言。一项重要的更新是对匿名函数的改进和增强。匿名函数(也称为闭包)是一种特殊类型的函数,可以在运行时动态创建并传递给其他函数或存储在变量中。在php中,匿名函数对于高级编程和web开发至关重要。PHP8.0提供了一些新的语法和功能,可以使匿名函数更加灵活和易于使用。其中一些更新如下:函数参数的类型声明在PHP8.0中,匿名函数可以声明其参数的类型。这意味着可以通过类型约束来限制函数参数的类型,以确保传递正确的参数类型。例如,以下代码使用匿名函数来计算两个整
发表于:2024-07-29 浏览:258 TAG:
【PHP】php单例模式的应用场景有哪些
php单例模式的应用场景有数据库连接、缓存管理、日志记录、配置管理、对象工厂和全局状态管理等。详细介绍:1、数据库连接,在一个PHP应用程序中,通常需要与数据库进行交互,为了避免频繁地创建和销毁数据库连接,可以使用单例模式来创建一个数据库连接类,并确保只有一个数据库连接实例存在,这样可以减少资源的消耗,并提高数据库操作的效率;2、缓存管理,缓存是一种常见的性能优化手段等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。单例模式是一种常见的设计模式,
发表于:2023-12-06 浏览:396 TAG:
【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作为一种流行的编程语言,具有强大
发表于:2023-12-04 浏览:638 TAG:
【PHP】微信支付V3生成平台证书
使用composer下载官网SDK:https://pay.weixin.qq.com/docs/merchant/sdk-tools/sdk-tool.htmlcomposer&nbsp;require&nbsp;wechatpay/wechatpay使用方式参考:https://pay.weixin.qq.com/docs/merchant/sdk-tools/quickstart-php.html然后根据命令生成平台证书,命令共需要5个内容:商户mchid,商户私钥V3 key,商户支付证
发表于:2023-12-02 浏览:629 TAG:
【PHP】PHP 框架中大型项目代码维护挑战与解决方法
在大型 php 项目中,代码维护面临主要挑战,包括依赖管理、代码重构、代码风格和文档。解决方法包括:使用依赖项管理器管理版本冲突。使用unittest框架在重构时保持代码完整性。建立并强制执行代码风格指南。建立文档策略并使用phpdoc生成文档。PHP 框架中大型项目代码维护挑战与解决方法在大型 PHP 项目中,代码维护可能是一个艰巨的任务。随着项目规模的增长,代码库会变得庞大且复杂,从而难以管理和更新。以下是 PHP 框架中代码维护面临的主要挑战以及解决这些挑战的一些方法:挑战 1:依赖管理依
发表于:2024-05-30 浏览:280 TAG:
【PHP】php网络服务器有哪些软件
php网络服务器有Apache HTTP Server、Nginx、Microsoft Internet Information Services、Lighttpd和Caddy等。详细介绍:1、Apache HTTP Server,Apache是最流行的开源Web服务器软件之一,广泛应用于PHP开发,它稳定、可靠,支持多平台,具有丰富的功能和灵活的配置选项;2、Nginx等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。在PHP开发中,常用的网络
发表于:2023-12-04 浏览:564 TAG:
【PHP】大规模项目中PHP框架的性能考虑
在大型 php 项目中,选择框架至关重要,关键性能考虑因素包括可扩展性、内存消耗、响应时间和并发性。比较流行框架的性能:laravel 具有高可扩展性和并发性,但内存消耗较高;symfony 性能均衡,非常可扩展;codeigniter 可扩展性高,但响应时间和并发性较低;zend framework 可扩展性、响应时间和并发性都很好。根据不同项目要求选择合适的框架,例如社交媒体平台推荐使用 symfony,而电子商务网站推荐使用 laravel。优化性能的技巧包括使用缓存、优化数据库查询、启用
发表于:2024-05-31 浏览:322 TAG:
【PHP】7个php字符串处理函数有哪些
7个php字符串处理函数有strlen()、strpos()、substr()、str_replace()、strtolower()、strtoupper()、trim()等。详细介绍:1、strlen(),用于获取字符串的长度;2、strpos(),用于查找字符串中的特定子串,返回第一次出现位置;3、substr(),用于获取字符串的子串;4、str_replace()等等。本教程操作系统:Windows10系统、PHP8.1.3版本、Dell G3电脑。在PHP中,有许多可以用于字
发表于:2023-12-04 浏览:694 TAG: