Files
RecipesCam/web/spike/probe5.mjs
T

19 lines
1.1 KiB
JavaScript

import CanvasKitInit from 'canvaskit-wasm/full';
import fs from 'node:fs';
const CK = await CanvasKitInit();
const load = (p) => { const b = fs.readFileSync(p); return CK.Typeface.MakeFreeTypeFaceFromData(b.buffer.slice(b.byteOffset, b.byteOffset+b.byteLength)); };
const tf = load('../assets/Cousine-Regular.ttf');
const etf = load('../assets/NotoEmoji-GPS.ttf');
const s = '📍📷';
console.log('cousine glyphs', JSON.stringify(tf.getGlyphIDs(s)));
console.log('emoji glyphs ', JSON.stringify(etf.getGlyphIDs(s)));
console.log('textWidth', tf.getTextWidth?.('RECIPESCAM', 24), etf.getTextWidth?.('📍', 24));
const surf = CK.MakeSurface(200, 100); const c = surf.getCanvas();
c.clear(CK.Color(0,0,0,255));
const p = new CK.Paint(); p.setColor(CK.Color(255,255,255,255));
const f = new CK.Font(etf, 48);
c.drawText(s, 10, 60, p, f);
const px = surf.makeImageSnapshot().readPixels(0, 0, {width:200,height:100,colorType:CK.ColorType.RGBA_8888,alphaType:CK.AlphaType.Unpremul,colorSpace:CK.ColorSpace.SRGB});
let lit = 0; for (let i=0;i<px.length;i+=4) if (px[i]>128) lit++;
console.log('lit pixels in emoji draw:', lit);