我正在创建一个学生证系统,每个学生都有自己的。为此,我使用干预图像来获取学生数据并放入标准 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。
SMILET
TA贡献1796条经验 获得超4个赞
您遇到了文本覆盖问题,因为您正在对原始对象调用文本函数。相反,您需要对元素的副本进行修改,然后将其保存在数组中。
参见示例。
$generatedCards = [];
foreach ($students as $student) {
$generatedCard = clone $card;
$generatedCard->text('...');
$generatedCards[] = $generatedCard;
}
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消