image - 如何以编程方式在静态背景上生成不同文本的图像?
问题描述
我在前端使用了 1,300 款游戏。我想在静态背景图像上生成包含游戏名称的“横幅”图像。
理想情况下,我想解析列表或数组中的所有名称并运行一些软件来为我创建图像。
我想知道这对于 PHP 是否可行/实用,如果是这样,我将如何开始呢?
理想的解决方案是采用静态背景图像和边界框坐标(即文本必须位于其中的区域)的某些软件。然后它会获取要写入的名称并调整大小以尽可能适合边界框。然后它会创建图像并保存该文件并使用数组/列表中的下一个名称重新开始。
关于如何做到这一点的任何想法?甚至可能吗?
解决方案
GD 库可以做到这一点。使用imagettfbbox()函数计算文本的尺寸。
这是一个在图像底部添加左对齐标题的示例。如果文本太长而无法适应指定的大小,则会减小大小以使其适合。
<?php
$img_src = "mona-lisa.jpg";
$txt = "Hello World";
$font = "DroidSans.ttf";
$text_size = 60.0;
$baseline_y = 30;
$margin = 20;
$img = imagecreatefromjpeg($img_src);
$width = imagesx($img);
$height = imagesy($img);
$box = imageftbbox($text_size, 0.0, $font, $txt);
$txtw = $box[2];
// If text_size is too large, adjust accordingly
if ($txtw > $width - 2 * $margin) {
$text_size *= ($width - 2 * $margin) / $txtw;
}
$white = imagecolorallocate($img, 255, 255, 255);
imagefttext($img, $text_size, 0.0, $margin, $height-$baseline_y, $white, $font, $txt);
imagejpeg($img);
输出:
推荐阅读
- django - 在 Django 模板中设置变量的自定义标签。将值从上下文中清空?
- ssl - 我的一个 haproxy 后端返回“没有服务器可用于处理此请求”
- sharepoint - 无法删除 SharePoint 库中既未签出也未打开进行编辑的文档?
- c# - ADOMD 与 SSAS 的连接
- python - 如何在文件末尾调试pycharm中的断点而不添加虚拟行?
- reactjs - 用玩笑测试方法时声明类组件中没有更新
- python - Cogs 帮助 Discord Py
- angular - ngx-treeview 高度应与浏览器大小相同,并随浏览器大小动态变化
- c# - 为什么在非异步方法中包装参数验证是可取的?
- pine-script - 仅当语句为真时如何使用 plotcandle() 函数?