Bibliothek zur Verarbeitung von TrueType -Schriftdateien.
Merkmale:
Dieses Repo ist für die Entwicklung von Version 2. Version 1 wird im Samsa -GUI -Repo verwaltet.
Die wesentlichen Schritte sind:
renderText() über die Samsainstance , um SVG -Zeichenfolgen zu erhalten Hier ist Beispielcode für node.js, der filename von der Festplatte lädt, ein Samsafont -Objekt erstellt, ein Samsainstance -Objekt mit Variationsachsen erstellt, die an bestimmte Orte festgelegt sind, die String hello, world! Als SVG speichert das SVG die Datei render.svg .
const nodeBuffer = fs . readFileSync ( filename ) ;
const arrayBuffer = nodeBuffer . buffer ;
const samsaBuffer = new SamsaBuffer ( arrayBuffer ) ;
const font = new SamsaFont ( samsaBuffer ) ;
const instance = font . instance ( { wght : 900 , wdth : 200 } ) ;
const svg = instance . renderText ( { text : "hello, world!" , fontSize : 72 } ) ;
fs . writeFileSync ( "render.svg" , svg ) ;In einem Browser erhalten Sie einen ArrayBuffer und verarbeiten ihn ähnlich. Das resultierende SVG kann in das DOM eingefügt werden.
const samsaBuffer = new SamsaBuffer ( arrayBuffer ) ;
const font = new SamsaFont ( samsaBuffer ) ;
const instance = font . instance ( { wght : 900 , wdth : 200 } ) ;
const svg = instance . renderText ( { text : "hello, world!" , fontSize : 72 } ) ;
document . getElementById ( "myDiv" ) . innerHTML = svg ; Wenn Sie eine Schriftdatei aus einer Remote -URL laden, verwenden Sie wahrscheinlich fetch() dann response.arrayBuffer() um den ArrayBuffer zu erhalten. Wenn eine Schriftart auf den Browser geschleppt wird, wird der ArrayBuffer erhalten, indem das Array e.dataTransfer.items aufgezählt wird, wobei e das Drop -Ereignis ist. Für jedes item im Array (es kann mehrere Elemente bestehen), setzt die kind set file file = item.getAsFile() und die file.arrayBuffer() .
Das Diagramm zeigt, wie Samsa ein Samsafont -Objekt aus einem ArrayBuffer erstellt, eine Samsainstanz aus dem Samsafont erstellt und dann den Text als SVG rendert.
Flussdiagramm TD
F1 [TTF] -> A [ArrayBuffer]
F2 [WOFF2] -> A [ArrayBuffer]
A [ArrayBuffer] -> B [Samsabuffer]
B -> C [Samsafont]
B [Samsabuffer] -> | "Samsabuffer.deCodewoff2 ()" | C [Samsafont]
C -> | "samsafont.instance (axissettings)" | D (Samsainstance)
D -> | "samsainstance.rendertext ({text: mytext, fontsize: mySize, color: mycolor})" | E (SVG)