首页 > 解决方案 > 如何以编程方式在静态背景上生成不同文本的图像?

问题描述

我在前端使用了 1,300 款游戏。我想在静态背景图像上生成包含游戏名称的“横幅”图像。

理想情况下,我想解析列表或数组中的所有名称并运行一些软件来为我创建图像。

我想知道这对于 PHP 是否可行/实用,如果是这样,我将如何开始呢?

理想的解决方案是采用静态背景图像和边界框坐标(即文本必须位于其中的区域)的某些软件。然后它会获取要写入的名称并调整大小以尽可能适合边界框。然后它会创建图像并保存该文件并使用数组/列表中的下一个名称重新开始。

关于如何做到这一点的任何想法?甚至可能吗?

标签: imageimage-processing

解决方案


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

输出:

蒙娜丽莎的图片和标题


推荐阅读