我们可以根据干预语言使用多种字体来使用干预库创建覆盖文本吗?

时间:2019-04-29 05:23:54

标签: php laravel 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 个答案:

答案 0 :(得分:0)

我自己解决了。在此处发布我的解决方案,可能会帮助遇到类似问题的人。

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