Можем ли мы использовать несколько шрифтов на основе разных языков для создания наложенного текста с использованием библиотеки интервенций? - PullRequest
2 голосов
/ 29 апреля 2019

Я использую библиотеку Intervention для записи наложенного текста на изображение. Это прекрасно работает, если предоставленный текст на одном языке (скажем, английском)

Мне нужно написать оверлейный текст на нескольких языках в зависимости от заданного ввода (ввод может быть на любом языке).

Вот моя база кода для генерации вышеупомянутого.

public static function generateTextOverImage($image, $text)
{
    $img = Image::make($image->getContent());
    $extension = 'jpg';
    $centerX = 25;
    $centerY = 210;
    $text = str_replace('<br>', "\n", html_entity_decode($message)) ;
    $lines = explode("\n", wordwrap($text, 21));
    $currentLineVIndex = $centerY;

    foreach ($lines as $line) {
        $img->text($line, $centerX, $currentLineVIndex, function ($font) use ($fontSize) {
            $font->file(public_path('fonts/LucidaGrande.ttf'));
            $font->size(18);
            $font->color('#fdf6e3');
        });

    }
    $encoded = $img->encode($extension);
    return $encoded;
}

Поскольку текст может быть на разных языках (один или несколько языков одновременно). Ожидаемый текст поверх изображения в ломаной. Отлично работает только на английском языке.

Любая помощь будет высоко оценена. Спасибо

Обновление

есть ли какой-нибудь шрифт, который поддерживает несколько языков?

1 Ответ

1 голос
/ 29 апреля 2019

Я решил это самостоятельно. Разместите мое решение здесь, возможно, оно поможет кому-то, имеющему подобную проблему.

Решением было использование шрифта unicode (Arial Unicode MS), который поддерживает разные шрифты.

Ниже приводится решение

public static function generateTextOverImage($image, $text)
{
    $img = Image::make($image->getContent());
    $extension = 'jpg';
    $centerX = 25;
    $centerY = 210;
    $text = str_replace('<br>', "\n", html_entity_decode($message)) ;
    $lines = explode("\n", wordwrap($text, 21));
    $currentLineVIndex = $centerY;

    foreach ($lines as $line) {
        $img->text($line, $centerX, $currentLineVIndex, function ($font) use ($fontSize) {
            $font->file(public_path('fonts/arial-unicode-ms/arial-uni.ttf'));
            $font->size(18);
            $font->color('#fdf6e3');
        });

    }
    $encoded = $img->encode($extension);
    return $encoded;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...