строка — PHP: получить ширину в пикселях текста, включая & quot; нормальный & quot; текст и смайлики

Я хочу обрезать заданный текст на заданное количество пикселей.

Для этого я делаю цикл по длине текста и с каждым циклом добавляю следующий символ и измеряю строку с помощью метода. imagettfbbox, — Это нормально работает для меня на «нормальном тексте», например. как эта публикация. 😉

Но если я добавлю немного смайликов в свой текст, длина будет даже меньше, чем ожидалось. Я думаю, это потому, что эмоджи кодируются более чем 1 байтом. —
Вот почему я использую mb_strwidth а также mb_substr,

Метод imagettfbbox ожидает файл шрифта для измерения заданной строки. Этот шрифт может отображать мои эмодзи.

Вот мой код

$Line = "�� Garden, �� Clock, some other things";
$MaxLength = 100; // Pixel

// Start looping through the line, start with 15 characters
for ( $Len = 15; $Len < mb_strwidth($Line); $Len++ ) {

// Grep x Chars from line
$NewLine = mb_substr($Line, 0, $Len);

// Measure string
$FontBox = imagettfbbox(12, 0, "fonts/OpenSansEmoji.ttf", $NewLine);
$TextWidth = $FontBox[2];

// Compare measured string with given max length
if ( $TextWidth > $MaxLength ) {
$Line = mb_substr($Line, 0, $Len - 2) . "...";
break;
}
}

$Line = NewLine;

Строки примера

"�� Garden, �� Clock, some other things""�������������������������������� Gaaaaaaaaaaaardeeeeeeeeeeeeeeeeeen""mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm""iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii""erufgbwuiergbvfuipwervbpiuwebvruiwbevuibwüeriuvbwieuörvböwieuvbr"

Результат

Как видите, чем больше смайликов я использую, тем короче линия.

С уважением от не носитель языка. 🙂

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]