我需要能够将文本和特定字体转换为 svg 路径数据,并且碰巧遇到了 opentype.js 和maker.js,彼此独立,看到maker.js 使用opentype.js。当我单独使用 opentype.js 时,它无法正确渲染字体路径...当我给它填充时,它无法正确显示。当我使用maker.js时,它明显更好,但仍然不正确。
要绝对清楚问题描述:我需要一种方法将具有给定字体的文本转换为 svg 路径数据,然后将其“扁平化”(任何黑色重叠都会被合并,并且合并文本内的任何白色元素都会被合并)保留 - 例如看字母“P”...如果我联合它,它会删除“P”内部的白色部分,这是我需要的)。此时我不关心方法...它只需要与 php 兼容(它不能使用 imagemagick 或从终端运行的其他第 3 方软件 - 例如 inkscape...我无权访问运行 shell_exec() 或 exec()) 或 javascript
我有过很多失败的尝试,所以...非常感谢帮助!
---maker.js---
这是一次尝试...运行此代码片段会导致我的浏览器崩溃,但在其自己的文件中工作正常。
这是结果和代码:
window.onload = function()
{
var makerjs = require('makerjs');
var url = 'https://staging-gumcreekboards.temp312.kinsta.cloud/wp-content/themes/Divi-child/CanvEsIntegration/static/CreekWareFonts/woff/work_in_progress-updated.woff';
var text = 'Shane';
var size = 72;
var union = true;
var bezierAccuracy = 0;
var svg = document.createElement('div');
opentype.load(url, (err, font) => {
textModel = new makerjs.models.Text(font, text, size, union, true, bezierAccuracy);
//console.log(textModel.models, makerjs.model.simplify);
svg.innerHTML = makerjs.exporter.toSVG((textModel));
document.getElementById('svgcontainer').innerHTML = svg.innerHTML;
});
};
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/makerjs@0/target/js/browser.maker.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bezier-js@2/bezier.js"></script>
<script src="https://cdn.jsdelivr.net/npm/opentype.js@0/dist/opentype.js"></script>
</head>
<body>
<style>path {stroke: red; stroke-width: 1px; stroke-linejoin: round; fill: black !important;}</style>
<div id="svgcontainer">
</div>
</body>
</html>
德玛西亚99
相关分类