From 4c302114c4e98d48ee4d1281ec70920dbc94a79a Mon Sep 17 00:00:00 2001 From: mkwiser Date: Sat, 25 Oct 2014 03:03:31 +0800 Subject: [PATCH] add ttf2eot eot2ttf replace ajaxBinaryFile.js to ajaxFile.js --- demo/eot.html | 493 ++++++++++++++++++ demo/js/glyfcanvas.js | 5 +- demo/js/glyfsvg.js | 5 +- demo/js/ttf2eot.js | 113 ++++ demo/js/ttf2svg.js | 5 +- demo/js/ttf2woff.js | 5 +- demo/js/ttfparse.js | 5 +- demo/js/woff2ttf.js | 7 +- demo/ttf2eot.html | 35 ++ font/iconfont.eot | Bin 0 -> 31520 bytes {test => font}/iconfont.svg | 0 {test => font}/iconfont.woff | Bin index.html | 6 +- src/common/{ajaxBinaryFile.js => ajaxFile.js} | 31 +- src/common/lang.js | 1 + src/fonteditor/data/online-font.js | 16 +- src/fonteditor/main.js | 5 +- src/fonteditor/ttf.js | 5 +- src/fonteditor/widget/actions.js | 5 +- src/fonteditor/widget/exporter.js | 6 + src/fonteditor/widget/loader.js | 59 ++- src/fonteditor/widget/previewer.js | 23 +- src/ttf/eot2base64.js | 27 + src/ttf/eot2ttf.js | 92 ++++ src/ttf/ttf2eot.js | 171 ++++++ src/ttf/ttfreader.js | 4 + template/preview-ttf.html | 4 + ttf.html | 6 +- 28 files changed, 1093 insertions(+), 41 deletions(-) create mode 100644 demo/eot.html create mode 100644 demo/js/ttf2eot.js create mode 100644 demo/ttf2eot.html create mode 100644 font/iconfont.eot rename {test => font}/iconfont.svg (100%) rename {test => font}/iconfont.woff (100%) rename src/common/{ajaxBinaryFile.js => ajaxFile.js} (62%) create mode 100644 src/ttf/eot2base64.js create mode 100644 src/ttf/eot2ttf.js create mode 100644 src/ttf/ttf2eot.js diff --git a/demo/eot.html b/demo/eot.html new file mode 100644 index 0000000..ccaf363 --- /dev/null +++ b/demo/eot.html @@ -0,0 +1,493 @@ + + + + + eot preview + + + + +
+

fonteditor图标

+ +
第一步:使用font-face声明字体 +
@font-face {
+    font-family: 'iconfont';
+    src: url('iconfont.eot'); /* IE9*/
+    src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+    url('iconfont.woff') format('woff'), /* chrome、firefox */
+    url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
+    url('iconfont.svg#uxiconfont') format('svg'); /* iOS 4.1- */
+}
+
+ 第二步:定义使用iconfont的样式 +
.iconfont {
+    font-family:"iconfont" !important;
+    font-size:16px;font-style:normal;
+    -webkit-font-smoothing: antialiased;
+    -webkit-text-stroke-width: 0.2px;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+ 第三步:挑选相应图标并获取字体编码,应用于页面 +
<i class="iconfont">&#x33</i>
+
+
+
+ + \ No newline at end of file diff --git a/demo/js/glyfcanvas.js b/demo/js/glyfcanvas.js index 7807404..1e763ac 100644 --- a/demo/js/glyfcanvas.js +++ b/demo/js/glyfcanvas.js @@ -12,7 +12,7 @@ define( var ttfreader = require('ttf/ttfreader'); var TTF = require('ttf/ttf'); var ttf2base64 = require('ttf/ttf2base64'); - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); var setFontface = require('./setFontface'); var glyf2canvas = require('ttf/util/glyf2canvas'); var lang = require('common/lang'); @@ -102,7 +102,8 @@ define( var upFile = document.getElementById('upload-file'); upFile.addEventListener('change', onUpFileChange); - ajaxBinaryFile({ + ajaxFile({ + type: 'binary', url: '../test/baiduHealth.ttf', onSuccess: function(binaryData) { setFont(binaryData); diff --git a/demo/js/glyfsvg.js b/demo/js/glyfsvg.js index 393b20f..31eeb70 100644 --- a/demo/js/glyfsvg.js +++ b/demo/js/glyfsvg.js @@ -12,7 +12,7 @@ define( var ttfreader = require('ttf/ttfreader'); var TTF = require('ttf/ttf'); var ttf2base64 = require('ttf/ttf2base64'); - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); var glyf2svg = require('ttf/util/glyf2svg'); var setFontface = require('./setFontface'); var lang = require('common/lang'); @@ -117,7 +117,8 @@ define( var upFile = document.getElementById('upload-file'); upFile.addEventListener('change', onUpFileChange); - ajaxBinaryFile({ + ajaxFile({ + type: 'binary', url: '../test/baiduHealth.ttf', onSuccess: function(binaryData) { setFont(binaryData); diff --git a/demo/js/ttf2eot.js b/demo/js/ttf2eot.js new file mode 100644 index 0000000..9cb5b5e --- /dev/null +++ b/demo/js/ttf2eot.js @@ -0,0 +1,113 @@ +/** + * @file ttf2eot.js + * @author mengke01 + * @date + * @description + * ttf2eot 转换 + */ + +define( + function(require) { + var ajaxFile = require('common/ajaxFile'); + var ttf2eot = require('ttf/ttf2eot'); + var eot2ttf = require('ttf/eot2ttf'); + var ttf2base64 = require('ttf/ttf2base64'); + var eot2base64 = require('ttf/eot2base64'); + var TTFReader = require('ttf/ttfreader'); + var TTFWriter = require('ttf/ttfwriter'); + var TTF = require('ttf/ttf'); + + // 设置字体 + function setFont(base64str) { + var str = '' + + '@font-face {' + + 'font-family:\'truetype\';' + + 'src:url(' + + base64str + + ') format(\'truetype\');' + + '}'; + document.getElementById('font-face').innerHTML = str; + } + // 查看ttf glyf + function showTTFGlyf(ttfData) { + + ttf = new TTF(ttfData); + var codes = ttf.codes(); + + var str = ''; + // 获取unicode字符 + codes.forEach(function(item) { + str += '
  • ' + + ''+ String.fromCharCode(item) +'' + + (item > 255 ? '\\u' + Number(item).toString(16) : item) + +'
  • '; + }); + $('#font-list').html(str); + } + + function write() { + ajaxFile({ + type: 'binary', + url: '../font/iconfont.ttf', + onSuccess: function(buffer) { + + var eotBuffer = ttf2eot(buffer); + + var ttfReader = new TTFReader(); + var ttfBuffer = eot2ttf(eotBuffer); + var ttfData = ttfReader.read(ttfBuffer); + showTTFGlyf(ttfData); + + var base64str = ttf2base64(ttfBuffer); + setFont(base64str); + + var base64str = eot2base64(eotBuffer); + var saveBtn = $('.saveas'); + saveBtn.attr('href', base64str); + saveBtn.attr('download', 'save.eot'); + + }, + onError: function() { + console.error('error read file'); + } + }); + } + + + function readeot() { + ajaxFile({ + type: 'binary', + url: './iconfont.eot', + onSuccess: function(buffer) { + + + var ttfBuffer = eot2ttf(buffer); + var ttfReader = new TTFReader(); + var ttfData = ttfReader.read(ttfBuffer); + var base64str = ttf2base64(ttfBuffer); + setFont(base64str); + showTTFGlyf(ttfData); + + }, + onError: function() { + console.error('error read file'); + } + }); + } + + var entry = { + + /** + * 初始化 + */ + init: function () { + //write(); + readeot(); + } + }; + + entry.init(); + + return entry; + } +); \ No newline at end of file diff --git a/demo/js/ttf2svg.js b/demo/js/ttf2svg.js index 0bbdfef..8dce829 100644 --- a/demo/js/ttf2svg.js +++ b/demo/js/ttf2svg.js @@ -8,7 +8,7 @@ define( function(require) { - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); var ttf2svg = require('ttf/ttf2svg'); var svg2base64 = require('ttf/svg2base64'); var TTFReader = require('ttf/ttfreader'); @@ -45,7 +45,8 @@ define( function write() { - ajaxBinaryFile({ + ajaxFile({ + type: 'binary', url: '../font/iconfont.ttf', onSuccess: function(buffer) { diff --git a/demo/js/ttf2woff.js b/demo/js/ttf2woff.js index 0ecdd0e..d71f523 100644 --- a/demo/js/ttf2woff.js +++ b/demo/js/ttf2woff.js @@ -8,7 +8,7 @@ define( function(require) { - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); var ttf2woff = require('ttf/ttf2woff'); var woff2base64 = require('ttf/woff2base64'); var TTFReader = require('ttf/ttfreader'); @@ -68,7 +68,8 @@ define( function write() { - ajaxBinaryFile({ + ajaxFile({ + type: 'binary', url: '../font/iconfont.ttf', onSuccess: function(buffer) { diff --git a/demo/js/ttfparse.js b/demo/js/ttfparse.js index 39dc197..b5304c3 100644 --- a/demo/js/ttfparse.js +++ b/demo/js/ttfparse.js @@ -11,7 +11,7 @@ define( function(require) { var ttfreader = require('ttf/ttfreader'); var TTF = require('ttf/ttf'); - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); function onUpFileChange(e) { var file = e.target.files[0]; @@ -40,7 +40,8 @@ define( var upFile = document.getElementById('upload-file'); upFile.addEventListener('change', onUpFileChange); - ajaxBinaryFile({ + ajaxFile({ + type: 'binary', url: '../test/baiduHealth.ttf', onSuccess: function(binaryData) { var ttfReader = new ttfreader(); diff --git a/demo/js/woff2ttf.js b/demo/js/woff2ttf.js index 1b634e8..5747ab4 100644 --- a/demo/js/woff2ttf.js +++ b/demo/js/woff2ttf.js @@ -8,7 +8,7 @@ define( function(require) { - var ajaxBinaryFile = require('common/ajaxBinaryFile'); + var ajaxFile = require('common/ajaxFile'); var woff2ttf = require('ttf/woff2ttf'); var TTFReader = require('ttf/ttfreader'); var inflate = require('inflate').inflate; @@ -16,8 +16,9 @@ define( function write() { - ajaxBinaryFile({ - url: '../test/iconfont.woff', + ajaxFile({ + type: 'binary', + url: '../font/iconfont.woff', onSuccess: function(buffer) { var ttfBuffer = woff2ttf(buffer, { diff --git a/demo/ttf2eot.html b/demo/ttf2eot.html new file mode 100644 index 0000000..1113bc9 --- /dev/null +++ b/demo/ttf2eot.html @@ -0,0 +1,35 @@ + + + + + ttf2eot test + + + + + + + +保存 + + + + + + + + + + + \ No newline at end of file diff --git a/font/iconfont.eot b/font/iconfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..cd9bc4bd4f010a4bb9bbeb580639670c4f94e126 GIT binary patch literal 31520 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
    `BHwXKMXffC8B!6G%3gS=nADB=nqae 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 literal 0 HcmV?d00001 diff --git a/test/iconfont.svg b/font/iconfont.svg similarity index 100% rename from test/iconfont.svg rename to font/iconfont.svg diff --git a/test/iconfont.woff b/font/iconfont.woff similarity index 100% rename from test/iconfont.woff rename to font/iconfont.woff diff --git a/index.html b/index.html index 93eb8db..d909919 100644 --- a/index.html +++ b/index.html @@ -10,8 +10,8 @@