/
ttf2svg.js
83 lines (68 loc) · 1.84 KB
/
ttf2svg.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* @file ttf2woff.js
* @author mengke01
* @date
* @description
* ttf2woff 转换
*/
import ajaxFile from 'fonteditor-core/common/ajaxFile';
import ttf2svg from 'fonteditor-core/ttf/ttf2svg';
import svg2base64 from 'fonteditor-core/ttf/svg2base64';
import TTFReader from 'fonteditor-core/ttf/ttfreader';
import TTF from 'fonteditor-core/ttf/ttf';
// 设置字体
function setFont(base64str) {
let str = ''
+ '@font-face {'
+ 'font-family:\'truetype\';'
+ 'src:url('
+ base64str
+ ') format(\'svg\');'
+ '}';
document.getElementById('font-face').innerHTML = str;
}
// 查看ttf glyf
function showTTFGlyf(ttfData) {
let ttf = new TTF(ttfData);
let codes = ttf.codes();
let str = '';
// 获取unicode字符
codes.forEach(function (item) {
str += '<li data-code="' + item + '">'
+ '<span class="i-font">' + String.fromCharCode(item) + '</span>'
+ (item > 255 ? '\\u' + Number(item).toString(16) : item)
+ '</li>';
});
$('#font-list').html(str);
}
function write() {
ajaxFile({
type: 'binary',
url: './test/fonteditor.ttf',
onSuccess(buffer) {
let svgBuffer = ttf2svg(buffer, {
metadata: 'fonteditor V0.1'
});
let base64str = svg2base64(svgBuffer);
setFont(base64str);
let saveBtn = $('.saveas');
saveBtn.attr('href', base64str);
saveBtn.attr('download', 'save.svg');
let ttfReader = new TTFReader();
let ttfData = ttfReader.read(buffer);
showTTFGlyf(ttfData);
},
onError() {
console.error('error read file');
}
});
}
let entry = {
/**
* 初始化
*/
init() {
write();
}
};
entry.init();