svg渲染右上角缺少一个角或者下方被裁切

记录一个问题:

MathJax渲染一个文本或者公式,然后输出svg,再把svg按照一个的缩放比例转换成bitmap,发现放大后的bitmap显示不全,

实现过程:

1、在android里面定义一个webview,加载一个html页面,在页面里面加载。

<script type="text/javascript" src="./js/tex-svg.js" id="MathJax-script" async></script>

2、定义<script>方法

function exportImage(math, dpi) {
try {
var result = MathJax.tex2svg(`${math}`, { display: true })
let svg = result.getElementsByTagName("svg")[0]

var viewBox = svg.getAttribute('viewBox')
var viewBoxArr = viewBox.split(' ')
viewBoxArr[2] = Number(viewBoxArr[2]) + 50
viewBoxArr[3] = Number(viewBoxArr[3]) + 50
svg.setAttribute('viewBox', viewBoxArr.join(' '))



var image = new Image()
image.src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svg.outerHTML));
image.onload = function () {
var canvas = document.createElement('canvas');

canvas.width = Math.round(image.width * dpi);;
canvas.height = Math.round(image.height * dpi);


 

var context = canvas.getContext('2d');
context.scale(dpi, dpi);
context.drawImage(image, 0, 0);

var img = document.createElement('img')
img.src = canvas.toDataURL('image/png')
document.body.appendChild(svg.outerHTML) //svg原图
document.body.appendChild(img)    //缩放后的bitmap

}
image.onerror = function () {

}
} catch (error) {

}
}

3、原因就是第2步,svg的viewBox可视图不够导致,通过js动态扩展修改宽和高来增加可视区域,这个时候缩放就正常了。

4、如何渲染到页面,使用参考:MathJax v3 with interactive TeX input and SVG output

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值