Полностью сопоставьте шрифт HTML5 Canvas со шрифтом Snapchat.

Я пытаюсь воссоздать «привязку» Snapchat с холстом HTML5. Часть, которая поставила меня в тупик, — заставить шрифт выглядеть одинаково. Шрифт, который использует Snapchat, похоже, Helvetica, но я не могу заставить свой текст выглядеть так же, как в настоящей привязке.

Вот моя попытка подобрать шрифт. Я нарисовал свой текст поверх фактического снимка экрана, чтобы его было легко сравнить. Вы можете отредактировать переменные JavaScript, чтобы они соответствовали тексту (JSFiddle: http://jsfiddle.net/9RB88/1 /).

HTML:

<img src='http://i.imgur.com/tivQ8xJ.jpg'>
<canvas width='640' height='1136'></canvas>

CSS:

img {display:none}

JavaScript:

//--- EDIT THESE ----------------
// text styles...
var fontFamily = 'Helvetica';
var fontSize = '35px';
var fontWeight = 'normal';
// http://css-tricks.com/almanac/properties/f/font-weight/

var onTop = false;
// set this to "true" to place our text on top of the real text (for more precise comparing)
var differentColours = false;
// draw our text/background different colours, making it easier to compare (use when "onTop" is "true")

// tweak where the text is drawn
var horOffset = 2;
var vertOffset = 0;
//-------------------------------



var can = document.getElementsByTagName('canvas')[0];
var c = can.getContext('2d');
c.fillStyle = 'white';
c.fillRect(0, 0, can.width, can.height);
var img = document.getElementsByTagName('img')[0];
c.drawImage(img, 0, 0);

var top;
if(onTop) top = 531;
else top = 450;

if(differentColours) c.fillStyle = 'orange';
else c.fillStyle = 'black';
c.globalAlpha = 0.6;
c.fillRect(0, top, can.width, 74);
c.globalAlpha = 1;
var text = 'Template example thingy $&@?! 123';
if(differentColours) c.fillStyle = 'red';
else c.fillStyle = 'white';
c.textAlign = 'center';
c.font = fontWeight + ' ' + fontSize + ' ' + fontFamily;
c.fillText(text, can.width/2 + horOffset, top + 50 + vertOffset);

JSFiddle: http://jsfiddle.net/9RB88/1/

Кажется, что одна из проблем — это расстояние между буквами, но это невозможно изменить в HTML5 Canvas.

Что я могу сделать?


person coffeecodecouch    schedule 11.04.2014    source источник


Ответы (1)


Snapchat может встраивать очень специфический вариант или аналогичный шрифт Helvetica. Это не означает, что у пользователя, загружающего страницу (в том числе на вашем собственном компьютере), этот шрифт будет установлен в системе.

Если у пользователя не установлен шрифт, браузер будет искать похожие шрифты, например, он будет использовать Arial в Windows, а если он недоступен, использовать другой шрифт без засечек. На Mac и Linux тоже самое. Это означает, что он, возможно, будет точно соответствовать, но не будет одним и тем же шрифтом. Если они не используют веб-шрифт, снимок мог быть сделан в другой ОС, чем вы используете, что привело к отображению другого шрифта.

Или, другими словами, когда вы указываете «Helvetica» в качестве семейства шрифтов, система попытается найти шрифт в этом семействе, но не указано, что Helvetica — это шрифт, который вы получите. Браузер попытается найти наиболее близкий подходящий шрифт, доступный в используемой системе.

Вы должны внедрить тот же самый шрифт, который они используют в качестве веб-шрифта, иначе нет гарантии, что шрифт будет таким же.

Чтобы узнать, какой шрифт они используют (если есть), откройте таблицы стилей, которые они используют.

Мои 2 цента..

person Community    schedule 11.04.2014
comment
Спасибо, я просто внимательно посмотрел и заметил наклон на t. Похоже, мой компьютер возвращается к Arial, однако когда я запускаю xlsfonts | grep helvetica, он показывает, что Helvetica установлена. Вы знаете, в чем может быть проблема? Еще раз спасибо, я понятия не имею, сколько времени мне понадобилось, чтобы понять это. - person coffeecodecouch; 12.04.2014
comment
@coffeecodecouch Установленный вами шрифт Helvetica, вероятно, является шрифтом PS, установленным локально для использования с пакетом f.ex Adobe и недоступным через систему (хотя здесь просто предположение). Если вы можете сделать его доступным для использования в системе, тогда его следует выбрать, но это не обязательно относится к другому пользователю на его компьютере. Что-то иметь в виду :) - person ; 12.04.2014
comment
И я полагаю, невозможно связать стандартную таблицу стилей шрифта Helvetica в моем HTML, потому что это не бесплатный шрифт? - person coffeecodecouch; 12.04.2014
comment
Является ли единственным законным способом гарантировать, что все получат одинаковый результат, чтобы отобразить текст на моем сервере и отправить его обратно в виде изображения? - person coffeecodecouch; 12.04.2014
comment
@coffeecodecouch да, IIRC имеет некоторые лицензионные ограничения для Helvetica, хотя шрифты сами по себе не могут быть защищены, но в некоторых формах (например, в постскриптуме) они фактически лицензируются как программное обеспечение. Но я могу быть неточен здесь, и я не юрист, поэтому серверный подход, вероятно, лучше гарантирует, что вы каждый раз получаете один и тот же результат. Для лицензирования я бы проверил юридические документы для шрифта - person ; 12.04.2014