Отображение всех символов шрифта

Мне интересно, есть ли способ отобразить все символы шрифта с помощью HTML/CSS/JS/PHP?

Скажем, я хотел бы отобразить все возможные символы "Arial". Или символы из шрифта пользовательского шрифта @font-face.

Ответ 1

Шрифты могут отображать широкий диапазон символов Юникода, используя коды от 0 до 0x10FFFF. Таким образом, если вы действительно хотите видеть все в любом случайном шрифте, делать это в цикле, как было предложено в других ответах, действительно будет проблематичным. Даже для "простого" примера Arial наименьший отображаемый символ равен U + 0020, а наивысший - U + FB02. Однако не все в этом диапазоне отображается, поэтому, если вы сделали это в цикле, у вас получилось бы много пустых тарелок. Не говоря уже о том, что это, вероятно, будет довольно медленным.

Чтобы делать то, что вы хотите эффективно, вам понадобится что-то, чтобы взломать файл шрифта, изучить таблицу cmap и получить список отображаемых символов ( не диапазон). Я не уверен, что такое ваша установка, но вы, вероятно, могли бы сделать эту серверную часть с чем-то вроде FreeType или некоторыми такими.

Ответ 2

Я хотел бы предложить вам попробовать GD library imagettftext(). Пример из руководства:

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The string with character sets
for($i=0; $i<256; $i++){ 
     $text.= chr($i); 
} 

// Replace path by your own font path
$font = 'arial.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);

Ответ 3

Вы можете просто использовать функцию chr с циклом for. У вас будет несколько персонажей, которых нет, но это быстро и просто. Если вы хотите, вы можете быть более конкретным о значении начала и конца ascii.

for($x=1;$x<=255;$x++) {
    echo chr($x) . "&nbsp;"; 
}

Затем вы можете просто использовать jquery для динамического изменения шрифта.

Ответ 4

У меня была аналогичная ситуация, и я решил, что он разбирает файл .svg. Поэтому, если у вас нет файла в SVG, вы можете преобразовать ttf в SVG, а затем проанализировать его, чтобы получить unicode доступных символов.