是否可以在不同语言的基础上使用多种字体,使用干预库创建叠加文本?

Can we use multiple fonts on the basis of different language to create overlay text using intervention library?

我正在使用 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;
}

因为文本可以使用不同的语言(一次使用一种或多种语言)。图像上的预期文本损坏。 它仅适用于英语。

我们将不胜感激任何帮助。谢谢

更新

有支持多语言的字体吗?

我自己解决了。在这里发布我的解决方案,可能会对遇到类似问题的人有所帮助。

解决方案是,使用支持不同字体的 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;
}