我正在使用干预库在图像上写覆盖文字。 如果提供的文本是一种语言(例如英语),则此方法非常完美
我需要根据给定的输入以多种语言编写覆盖文字(输入可以是任何一种语言)。
这是我生成上述代码的代码库。
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;
}
由于文本可以使用不同的语言(一次使用一种或多种语言)。图像上方的预期文本已损坏。 它仅适用于英语。
任何帮助将不胜感激。谢谢
有没有支持多种语言的字体?
答案 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;
}