为了账号安全,请及时绑定邮箱和手机立即绑定

生成具有不同文本的图像的问题

生成具有不同文本的图像的问题

PHP
慕盖茨4494581 2021-07-07 17:06:02
我正在创建一个学生证系统,每个学生都有自己的。为此,我使用干预图像来获取学生数据并放入标准 ID 卡模板。我所做的基本代码是:<?php[...]$card = Image::make('card_id-model.png');$card->text('CARD ID', 20, 40, function($font) {    $font->file('arial.ttf');    $font->size(24);    $font->color('#fdf6e3');    $font->align('center');    $font->valign('top');    $font->angle(45);});$card->text('NAME: STUDENT\'S NAME', 20, 60, function($font) {    $font->file('arial.ttf');    $font->size(24);    $font->color('#fdf6e3');    $font->align('center');    $font->valign('top');    $font->angle(45);});$card->text('CODE: STUDENT\'S CODE', 20, 80, function($font) {    $font->file('arial.ttf');    $font->size(24);    $font->color('#fdf6e3');    $font->align('center');    $font->valign('top');    $font->angle(45);});$card->save('card_id - student\'s code.png');这种方式比较慢,考虑到我每次创建图像时都会调用该函数。所以我决定首先实例化图像,因为它将用于所有卡片 id。好吧,但是我在循环应用它以同时生成几个时遇到了问题,因为文本被覆盖了。<?php[...]$card = Image::make('card_id-model.png');$card->text('CARD ID', 20, 40, function($font) {    $font->file('arial.ttf');    $font->size(24);    $font->color('#fdf6e3');    $font->align('center');    $font->valign('top');    $font->angle(45);});for ($students as $student) {    $card->text('NAME: ' . $student->name, 20, 60, function($font) {        $font->file('arial.ttf');        $font->size(24);        $font->color('#fdf6e3');        $font->align('center');        $font->valign('top');        $font->angle(45);    });    $card->text('CODE: ' . $student->code, 20, 80, function($font) {        $font->file('arial.ttf');        $font->size(24);        $font->color('#fdf6e3');        $font->align('center');        $font->valign('top');        $font->angle(45);    });    $card->save('card_id - ' . $student->code . '.png');}这是我发现的最好和最快的大规模生产方式。有人有任何提示吗?
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

我通常先在 AI 中进行设计,然后从中取出 SVG,然后用 CSS+HTML 填充。由于 PHP 可以帮助填写它,因此我仅使用它来生成 HTML。

然后 HTML 将转换为 PDF,然后我就从那里打印出来。

在任何情况下,PHP 都不是生成图像的理想选择,尽管有一种方法可以做到。使用浏览器的力量来做到这一点。谷歌浏览器很强大,但如果你需要它在服务器上运行,你可以使用 wkhtmltopdf。


查看完整回答
反对 回复 2021-07-16
?
SMILET

TA贡献1796条经验 获得超4个赞

您遇到了文本覆盖问题,因为您正在对原始对象调用文本函数。相反,您需要对元素的副本进行修改,然后将其保存在数组中。


参见示例。


$generatedCards = [];


foreach ($students as $student) {

    $generatedCard = clone $card;

    $generatedCard->text('...');

    $generatedCards[] = $generatedCard;

}


查看完整回答
反对 回复 2021-07-16
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信