add personal notes for measuring text
This commit is contained in:
parent
eeb9815702
commit
5bf5f5cbe5
2 changed files with 62 additions and 34 deletions
62
src/量測文字.txt
Normal file
62
src/量測文字.txt
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import * as fontkit from "fontkit";
|
||||||
|
var font = await fontkit.openSync('/home/yoxem/桌面/TMP/ts-playground/aliputtat/LinLibertine_DR.otf');
|
||||||
|
var run = font.layout('a̍h',undefined, undefined, undefined, "ltr");
|
||||||
|
|
||||||
|
for (var i=0;i<=2;i++){
|
||||||
|
console.log(run.glyphs[i]._metrics);
|
||||||
|
console.log(run.glyphs[i].bbox); // bounding box
|
||||||
|
console.log(run.glyphs[i].advanceWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*結果:
|
||||||
|
|
||||||
|
假設文字大小為16(px)(=12pt),則下面的數字單位為
|
||||||
|
16/1000 px = [文字pt值]*(4/3)/1000 px
|
||||||
|
454 即 454*16/1000 px;1140即1140*16/1000 px等等。
|
||||||
|
*/
|
||||||
|
|
||||||
|
{
|
||||||
|
advanceWidth: 454, // 游標前進的長度
|
||||||
|
advanceHeight: 1140, // 游標往下的長度
|
||||||
|
leftBearing: 42,
|
||||||
|
topBearing: 475
|
||||||
|
}
|
||||||
|
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||||
|
minX: 42, // 文字最左邊的x座標
|
||||||
|
minY: -10, // 文字最下邊的y座標
|
||||||
|
maxX: 441, // 文字最右邊的座標
|
||||||
|
maxY: 419 // 文字最上的座標
|
||||||
|
|
||||||
|
}
|
||||||
|
//文字glyph字圖寬度 = (441-42)*16/1000 px
|
||||||
|
//文字glyph字圖高度 = (419-(-10))*16/1000 px
|
||||||
|
|
||||||
|
|
||||||
|
454
|
||||||
|
{
|
||||||
|
advanceWidth: 0,
|
||||||
|
advanceHeight: 1140,
|
||||||
|
leftBearing: -181,
|
||||||
|
topBearing: 184
|
||||||
|
}
|
||||||
|
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||||
|
minX: -181,
|
||||||
|
minY: 548,
|
||||||
|
maxX: -127,
|
||||||
|
maxY: 710
|
||||||
|
}
|
||||||
|
0
|
||||||
|
{
|
||||||
|
advanceWidth: 511,
|
||||||
|
advanceHeight: 1140,
|
||||||
|
leftBearing: 18,
|
||||||
|
topBearing: 196
|
||||||
|
}
|
||||||
|
$f34600ab9d7f70d8$export$2e2bcd8739ae039 {
|
||||||
|
minX: 18.5,
|
||||||
|
minY: -5,
|
||||||
|
maxX: 499.75,
|
||||||
|
maxY: 698
|
||||||
|
}
|
||||||
|
511
|
|
@ -1,34 +0,0 @@
|
||||||
import sys
|
|
||||||
|
|
||||||
import uharfbuzz as hb
|
|
||||||
|
|
||||||
|
|
||||||
fontfile = sys.argv[1]
|
|
||||||
text = sys.argv[2]
|
|
||||||
|
|
||||||
blob = hb.Blob.from_file_path(fontfile)
|
|
||||||
face = hb.Face(blob)
|
|
||||||
font = hb.Font(face)
|
|
||||||
|
|
||||||
px = 96
|
|
||||||
scale = 1000000.0/952997
|
|
||||||
font.scale = (px *scale* 1024, px*scale * 1024)
|
|
||||||
|
|
||||||
buf = hb.Buffer()
|
|
||||||
buf.add_str(text)
|
|
||||||
buf.guess_segment_properties()
|
|
||||||
|
|
||||||
features = {"kern": True, "liga": True}
|
|
||||||
hb.shape(font, buf, features)
|
|
||||||
|
|
||||||
infos = buf.glyph_infos
|
|
||||||
positions = buf.glyph_positions
|
|
||||||
|
|
||||||
for info, pos in zip(infos, positions):
|
|
||||||
gid = info.codepoint
|
|
||||||
cluster = info.cluster
|
|
||||||
x_advance = pos.x_advance / 1024
|
|
||||||
y_advance = pos.y_advance / 1024
|
|
||||||
x_offset = pos.x_offset / 1024
|
|
||||||
y_offset = pos.y_offset /1024
|
|
||||||
print(f"gid{gid}={cluster}@{x_advance},{y_offset}+{x_advance},{y_advance}")
|
|
Loading…
Reference in a new issue