当前位置: 首页 > news >正文

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章,但是当我再次使用时,却发生了错误,回看Grafika文档,发现很久没更新了,不兼容新版的GD,所以改用了intervention/image插件来生成海报图。

但是后来需要对海报图上的文字位置进行位置调整,例如居中,intervention/image没办法很好的满足需求,需要自己计算文字显示区域大小,计算XY坐标,较为复杂。

如果需要完成以上的需求,可以使用antonlukin/poster-editor插件实现。

使用的插件
antonlukin/poster-editor 5.15

注意:antonlukin/poster-editor只能使用GD库

安装

composer require antonlukin/poster-editor

简单使用示例

try {$image = new PosterEditor\PosterEditor();$image->make('images/bridge.jpg')->fit(600, 600);$image->show();} catch(Exception $e) {echo $e->getMessage();
}

部分方法说明

创建实例

通过图片文件路径或者图片资源创建实例

$image = new PosterEditor\PosterEditor();$image->make(mixed $data)// 或者使用通过gd创建的图片资源
$image->set(instance $resourse)

也可以初始化一块画布,然后在画布上合成图片或文字

$image->canvas(int $width, int $height, array $options = array())

参数列表

  • width 画布宽度
  • height 画布高度
  • options
    • color 画布颜色,rgb数组或者十六进制颜色#ffffff
    • opacity 画布不透明度,0-100,数字越大透明度越高,0表示不透明,默认不透明
输出图片
  1. 直接输出图片
$image->show(string $format = null, int $quality = 90)
  1. 保存为文件
$image->save(string $path, int $quality = 90, string $format = null)
  • format 文件格式,png,gif,webp,jpg
  • quality 图片质量,0-100,100质量最好,文件最大。
  • path 图片文件路径

png格式是无损格式,quality只影响图片大小和压缩速度。

调整大小
  1. 重设宽高(忽略比例)
$image->resize(int $width, int $height)
  1. 按比例放大
$image->upsize(int $width = null, int $height = null)
  1. 按比例缩小
$image->downsize(int $width = null, int $height = null)
  1. 手动裁切
$image->crop(int $width, int $height, array $options = array())
  • width:裁切宽度
  • height:裁切高度
  • options:从哪个位置开始裁切
    • x
    • y
  1. 智能裁切
$image->fit(int $width, int $height, string $position = 'center')
  • width:裁切宽度
  • height:裁切高度
  • position:裁切位置,top-left、top、top-right、bottom-left、bottom、bottom-right、right、left、center
插入图片
$image->insert(mixed $data, array $options = array(), array &$boundary = array())
  • data:图片文件路径或者图片资源
  • options
    • x:x坐标
    • y:y坐标
    • opacity:画布不透明度,0-100,数字越大透明度越高,0表示不透明,默认不透明
  • boundary:此图片的位置和宽高
    • x:X坐标
    • y:Y坐标
    • width:文本框宽度
    • height:文本框高度
设置文字(主要功能)

文字功能是使用poster-editor的主要原因

$image->text(string $text, array $options = array(), array &$boundary = array())
  • text:文字内容
  • options
    • x:文本框起点的 X 坐标。
    • y:文本框起点的 Y 坐标。
    • width:文本框的宽度。
    • height:文本框的高度。
    • fontsize:字体大小,若字体过大,则会根据文本框进行缩小。
    • color:字体颜色。
    • lineheight:行高。
    • opacity:不透明度。0-100,数字越大透明度越高,0表示不透明,默认不透明。
    • horizontal:水平对齐,left,right,center,justify。
    • vertical:垂直对齐,left,right,center,justify。
    • fontpath:字体文件路径,.ttf 或 .otf格式。
    • debug:true则绘制文本框区域。
  • boundary:此文本框的位置和宽高
    • x:X坐标
    • y:Y坐标
    • width:文本框宽度
    • height:文本框高度

中文换行问题

经测试下来,插件可以通过检测空格,中文逗号,中文句号来进行换行

在这里插入图片描述

$image = new PosterEditor();
$image->canvas(500, 500, ['color'=>[213,138,138]]);
$image->text('我也像超出了平常旳自己,到了另一世界里。到了另一世界里.我爱热闹,也爱冷静,爱冷静爱冷:静爱冷静”爱群居,也爱独处。', ['x'=>50,'y'=>50,'width'=>350,'fontsize'=>50,'color'=>'#fcfcfc','opacity'=>10,'horizontal'=>'left','fontpath'=>$fontPathBold,'debug'=>true,
]);
$image->show('png');

中间包含文字的色块是开启了debug的效果

还能在图上画线、圆、矩形等,以及还有更多文字排版示例可以查看插件的github仓库文档

目前只能更改文字的大小、颜色、对齐这些信息,还不能给字体增加描边、阴影。

相关文章:

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章,但是当我再次使用时,却发生了错误,回看Grafika文档,发现很久没更新了,不兼容新版的GD,所以改用了intervention/image插件来生成海报图。 但是后来需要对海报…...

微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)

前言 假设一个空数组,通过 push 方法追加了一个项,控制台打印的结果竟然是 Number 数值。 例如,以下微信小程序代码: // 源数组 var arr = [] // 追加数据 var tem = arr.push(数据)...

1、DevEco Studio 鸿蒙仓颉应用创建

1. 仓颉鸿蒙应用简介 因为仓颉是静态编译型语言,使用仓颉开发的应用执行效率更高。而且主打全场景,后续可并入仓颉生态,其和ArkTS都是基于ArkUI进行开发,最大的区别是typescript和仓颉语法间的差异。 2. 应用创建 前置条件&…...

从头开始学PHP之面向对象

首先介绍下最近情况,因为最近入职了且通勤距离较远,导致精力不够了,而且我发现,人一旦上了班,下班之后就不想再进行任何脑力劳动了(对大部分牛马来说,精英除外)。 话不多说进入今天的…...

C++ | Leetcode C++题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:Solution(int m, int n) {this->m m;this->n n;this->total m * n;srand(time(nullptr));}vector<int> flip() {int x rand() % total;vector<int> ans;total--; // 查找位置 x 对应的…...

vrrp和mstp区别

思路 vrrp是用来虚拟网关&#xff0c;噢&#xff0c;是虚拟一条虚拟网关 优先级&#xff0c;priority越大越优先&#xff0c;优先级相同&#xff0c;哪个的路由器的vrrp先起来&#xff0c;谁就是主 mstp是快速生成树协议&#xff0c;防止环路用的 优先级越小越优先 华为命令…...

前端页面整屏滚动fullpage.js简单使用

官网CSS,JS地址 fullPage.js/dist/fullpage.min.js at master alvarotrigo/fullPage.js GitHub fullPage.js/dist/fullpage.min.css at master alvarotrigo/fullPage.js GitHub <!DOCTYPE html> <html lang"en"><head><meta charset"…...

JQuery基本介绍和使用方法

JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是原⽣的JavaScript提供的API操作DOM元素时, 代码⽐较繁琐, 冗⻓. 我们可以使⽤JQuery来操作⻚⾯对象. jQuery是⼀个快速、简洁且功能丰富的JavaScript框架, 于20…...

【案例】旗帜飘动

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Shader Graph 参考视频&#xff1a;Unity Shader Graph 旗帜飘动特效   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路&#xff1a;顶点偏移计算 与 顶点偏移忽略 3.1 纹理偏移 视觉上让旗帜保持动态飘动&a…...

大模型思维链推理的综述:进展、前沿和未来

转自公众号AIRoobt A Survey of Chain of Thought Reasoning: Advances, Frontiers and Future 思维链推理的综述&#xff1a;进展、前沿和未来 摘要&#xff1a;思维链推理&#xff0c;作为人类智能的基本认知过程&#xff0c;在人工智能和自然语言处理领域引起了极大的关注…...

项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋

一&#xff1a;系统展示: 二&#xff1a;约定前后端接口 2.1 登陆 登陆请求&#xff1a; GET /login HTTP/1.1 Content-Type: application/x-www-form-urlencodedusernamezhangsan&password123登陆响应&#xff1a; 正常对象&#xff1a;正常对象会在数据库中存储&…...

openEuler 系统中 Samba 文件共享服务器管理(windows、linux文件共享操作方法)

一、Samba 简介 Samba 是在 Linux 和 Unix 系统上实现 SMB/CIFS 协议的一个免费软件&#xff0c;使得这些系统可以与 Windows 系统进行文件和打印机共享。通过 Samba&#xff0c;可以将 openEuler 系统配置为文件服务器&#xff0c;让 Windows、Linux 和其他支持 SMB/CIFS 协议…...

使用 Elasticsearch 进行语义搜索

Elasticsearch 是一款功能强大的开源搜索引擎&#xff0c;可用于全文搜索、分析和数据可视化。传统上&#xff0c;Elasticsearch 以其执行基于关键字/词汇的搜索的能力而闻名&#xff0c;其中文档基于精确或部分关键字匹配进行匹配。然而&#xff0c;Elasticsearch 已经发展到支…...

软考:中间件

中间件 中间件是一类位于操作系统软件与用户应用软件之间的计算机软件&#xff0c;它包括一组服务&#xff0c;以便于运行在一台或多台机器上的多个软件通过网络进行交互。 中间件的主要功能包括通信支持和应用支持。 通信支持为应用软件提供平台化的运行环境&#xff0c;屏蔽…...

银行家算法(Banker’s Algorithm)

银行家算法&#xff08;Banker’s Algorithm&#xff09;是计算机操作系统中一种避免死锁发生的著名算法。该算法由艾兹格迪杰斯特拉&#xff08;Edsger Dijkstra&#xff09;在1965年为T.H.E系统设计&#xff0c;其核心理念基于银行借贷系统的分配策略&#xff0c;以确保系统的…...

用魔数严谨的判别文件类型:杜绝上传风险

在文件处理和管理中&#xff0c;确定文件的类型是一个常见的需求。虽然文件扩展名可以提供一些信息&#xff0c;但并不总是可靠的。魔数&#xff08;Magic Numbers&#xff09;是一种更为准确的方法&#xff0c;通过检查文件开头的特定字节序列来识别文件类型。本文将介绍如何在…...

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器&#xff0c;可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件&#xff0c;则跳过这一步。如果手上有ppk文件&#xff0c;那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式&#xff0c;你需要将 PPK 文…...

EXPLAIN 针对性优化 SQL 查询

在数据库管理和应用中&#xff0c;高效的 SQL 查询是确保系统性能的关键。随着数据量的不断增长和业务需求的日益复杂&#xff0c;优化 SQL 查询变得尤为重要。而 EXPLAIN 命令是一种强大的工具&#xff0c;可以帮助我们深入了解 SQL 查询的执行计划&#xff0c;从而进行有针对…...

MR30分布式IO:石化行业的智能化革新

在浩瀚的工业领域中&#xff0c;石化行业如同一座巨大的化工厂&#xff0c;将自然界的原始资源转化为人们日常生活中不可或缺的各种产品。然而&#xff0c;随着生产规模的扩大和工艺复杂度的提升&#xff0c;石化行业面临着前所未有的挑战&#xff1a;如何在保证生产效率的同时…...

linux图形化X窗口

【linux图形化协议框架】 X、X11系统&#xff1a;X协议&#xff0c;X服务器&#xff0c;窗口管理器&#xff0c;X客户端&#xff08;客户端库Xcb&#xff0c;Xlib库等&#xff09;&#xff0c;输入、绘制 Wayland系统&#xff1a;Wayland 协议&#xff0c;合成器、客户端&#…...

三步搞定B站视频转文字:终极高效内容提取方案

三步搞定B站视频转文字&#xff1a;终极高效内容提取方案 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text Bili2text是一款专为B站视频设计的智能文字提取工具…...

别再让串口指示灯‘瞎闪’了!手把手教你用LM358运放做个‘聪明’的LED驱动电路

别再让串口指示灯‘瞎闪’了&#xff01;手把手教你用LM358运放做个‘聪明’的LED驱动电路 调试串口通信时&#xff0c;最让人头疼的莫过于那些"瞎闪"的指示灯——波特率一高&#xff0c;LED就像得了癫痫&#xff0c;微弱的光斑根本分不清是发送还是接收。我曾在一个…...

VSCode安装与Qwen3开发环境配置一站式解决方案

VSCode安装与Qwen3开发环境配置一站式解决方案 为智能字幕开发量身打造的高效开发环境配置指南 1. 开篇&#xff1a;为什么需要专门的环境配置&#xff1f; 你是不是也遇到过这样的情况&#xff1a;好不容易下载了代码&#xff0c;却发现各种依赖报错&#xff0c;环境配置折腾…...

Anything V5服务优化指南:如何调整参数获得最佳生成效果

Anything V5服务优化指南&#xff1a;如何调整参数获得最佳生成效果 1. 理解Anything V5的核心参数 1.1 分辨率设置对生成效果的影响 Anything V5支持多种分辨率设置&#xff0c;但不同分辨率会直接影响生成速度和质量&#xff1a; 512x512&#xff1a;默认设置&#xff0c…...

别再只盯着username了!CTF表单注入题中,用Sqlmap探测password等隐藏参数的高效技巧

突破思维定式&#xff1a;CTF表单注入中隐藏参数的高阶利用策略 在CTF竞赛的Web安全赛道上&#xff0c;SQL注入始终是选手们的必修课。但当我们反复练习username参数注入时&#xff0c;出题人早已在暗处微笑——他们知道大多数选手会形成路径依赖。我曾在一个省级CTF比赛中遇到…...

基于STM32F103C8T6和LiuJuan20260223Zimage的物联网边缘智能网关

基于STM32F103C8T6和LiuJuan20260223Zimage的物联网边缘智能网关 最近在折腾一个智能农业的小项目&#xff0c;发现传感器数据一多&#xff0c;全往云上扔&#xff0c;不仅流量吃不消&#xff0c;响应也慢半拍。要是能先在本地处理一下&#xff0c;只把关键信息传上去&#xf…...

揭秘LLM System Prompt的逆向工程:从API调试到Prompt Injection实战

1. 什么是System Prompt&#xff1f; 当你和ChatGPT聊天时&#xff0c;有没有好奇过它为什么总是用特定的语气回答&#xff1f;比如你问"今天天气怎么样"&#xff0c;它可能会说"根据我的知识库&#xff0c;天气信息需要实时查询..."而不是直接报个假数据。…...

C++的std--ranges代码生成

C20引入的std::ranges库彻底改变了代码生成的范式&#xff0c;它将函数式编程与现代C特性结合&#xff0c;让开发者能以声明式语法高效生成和处理数据流。这一特性不仅提升了代码可读性&#xff0c;还通过编译期优化显著提升性能。下面从三个关键角度解析其代码生成能力。范围适…...

遇到复杂车线桥耦合分析总被建模效率卡脖子?试试Simpack+Abaqus/ANSYS这套组合拳,咱们直接上干货聊聊那些提效黑科技

simpack abaqus ansys车线桥耦合高效建模分析工具 1.快速生成非线性柔性轨节点处mark 2.桥梁纵向轨底处的对应的mark及坐标 3.快速建立力元并设置preload方向 4.免安装运行环境点击exe输入 5.基于ansys或者abaqus和simpack联合仿真的5跨、3跨简支梁车线桥耦合分析实例轨节点标记…...

OpenClaw网关配置详解:Qwen3-32B镜像的端口与安全设置

OpenClaw网关配置详解&#xff1a;Qwen3-32B镜像的端口与安全设置 1. 为什么需要关注网关配置&#xff1f; 上周我在本地部署Qwen3-32B模型时&#xff0c;遇到了一个尴尬的问题&#xff1a;凌晨3点被安全团队电话叫醒&#xff0c;原因是OpenClaw的测试端口被扫描到异常流量。…...