- 快速入门
- Fabric.js 介绍
- Part 1:Objects 对象、Canvas 画布、Images 图像、Paths 形状
- Part 2:Animation 动画、Image filters 图像滤镜、Colors 颜色、Gradients 渐变、Text 文本、Events 事件
- Part 3:Groups 组合、Serialization 序列化、Deserialization、SVG parser 反序列化、SVG 解析器、Subclassing
- Part 4:Free drawing 自由绘画、Customization 可定制化、Fabric on Node.js
- Part 5:Zoom and panning 缩放和平移
- Part 6:Using transformations 使用转换
- Part 7:对 Text 类进行子分类以生成位图文本
- Part 8:裁切 和 ClipPath 裁切路径
- 自定义控件 API
- FabricJS 的缺陷
- Fabric.js 对象缓存
- Fabric.js 示例:自定义控件、多边形
- Fabric.js 示例:与画布外的对象交互
- API
- BaseBrush
- Canvas
- Circle
- CircleBrush
- Color
- Ellipse
- Gradient
- Group
- Image
- Intersection
- IText
- Line
- Object
- Observable
- Path
- PathGroup
- Pattern
- PatternBrush
- PencilBrush
- Point
- Polygon
- Polyline
- Rect
- Shadow
- SprayBrush
- StaticCanvas
- Text
- Triangle
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Part 7:对 Text 类进行子分类以生成位图文本
本教程是针对 stackoveflow 问题而创建的,在该问题中,用户需要在 fabricJS 中使用位图而不是字体的文本对象。该代码示例包含启动子类所需了解的所有内容。当您无法通过其他 API(事件,自定义控件)获得所需的功能时,请考虑子类化是一种最后的资源。
var canvas = new fabric.Canvas(id, { width: 500, height: 500, }); const charMap = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}' .split('').reduce((acc, char, index) => { acc[char] = index + 31; return acc; }, {}); class BitmapText extends fabric.Textbox { static type = 'BitmapText'; static ownDefaults = { charWidth: 6, charHeight: 9, fontSize: 9, bitmap: '/article_assets/font.png', readyToRender: false, }; static getDefaults() { return { ...super.getDefaults(), ...BitmapText.ownDefaults }; } constructor(text, options) { super(text, options); var image = fabric.getEnv().document.createElement('img'); image.onload = (function() { var canvas = fabric.getEnv().document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; canvas.getContext('2d').drawImage(image, 0, 0); this.bitmapResource = canvas; this.readyToRender = true; this.dirty = true; if (this.canvas) this.canvas.requestRenderAll(); }).bind(this); image.src = this.bitmap; } // override: make it return a fixed box 6x9 _measureChar(_char, charStyle, previousChar, prevCharStyle) { return { width: 6, kernedWidth: 6 }; } // ovveride, just draw the bitmpa we have. _renderChar(method, ctx, lineIndex, charIndex, _char, left, top) { if (!this.readyToRender) return; var res = this.bitmapResource; _char.split('').forEach((singleChar) => { ctx.drawImage(res, charMap[singleChar] * 6, 0, 5, 9, left, top - 6, 5, 9); ctx.translate(6, 0); }); } } fabric.classRegistry.setClass(BitmapText); // in order for your subclass to work with loadFromJSON you have to define this Static // methd `fromObject`. var text = new BitmapText('Hello i am a bitmap text', { scaleX: 5, scaleY: 5 }); canvas.add(text);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论