Проблема генерации изображения с другим текстом - PullRequest
0 голосов
/ 27 мая 2019

Я создаю систему студенческого билета, где у каждого студента будет своя собственная.

Для этого я использую изображение вмешательства, чтобы забрать данные студента и вставить стандартный шаблон удостоверения личности.

Основной код для этого я сделал:

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

Этот путь медленнее, учитывая, что я буду вызывать функцию каждый раз, когда создаю изображение. Поэтому я решил сначала создать экземпляр изображения, так как оно будет использоваться для всех идентификаторов карт. Хорошо, но у меня возникают проблемы с применением его в цикле для генерации нескольких одновременно, так как тексты перезаписываются.

<?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 ]

0 голосов
/ 27 мая 2019

У вас проблема с перезаписью текста, потому что вы вызываете текстовую функцию для исходного объекта. Вместо этого вам нужно внести изменения в копию элемента, а затем сохранить его в массиве.

См. Пример.

$generatedCards = [];

foreach ($students as $student) {
    $generatedCard = clone $card;
    $generatedCard->text('...');
    $generatedCards[] = $generatedCard;
}
0 голосов
/ 27 мая 2019

Я обычно делаю дизайн сначала в AI, затем извлекаю из него SVG, затем заливаю CSS + HTML. Поскольку PHP может помочь заполнить его, я использую его только для генерации HTML.

Затем HTML будет преобразован в PDF, а затем я просто распечатаю его оттуда.

В любом случае, PHP не идеален для генерации изображений, даже если есть способ сделать это. Используйте силу браузера, чтобы сделать это. Google Chrome надежен, но если вам нужно, чтобы он работал на сервере, вы можете использовать wkhtmltopdf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...