javascript - 如何使用fabric js从画布中获取图像
问题描述
我正在使用fabric js在图像上添加文本,但问题是我无法从画布下载最终图像。我在打印dataUrl时获取base64 url但没有获取图像URL。请找到下面的代码片段。
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.11/fabric.js"></script>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<canvas id="canvas" ></canvas>
<script>
var canvas = new fabric.Canvas('canvas');
// load image
fabric.Image.fromURL('https://pixlr.com/photo/image-editing-2-3-pw.jpg', function (img) {
img.scaleToWidth(100);
img.scaleToHeight(100);
// create text
var text = new fabric.Text('hello world', {
left: 70,
top: 80,
fontSize: 15,
fontFamily: 'Arial',
fill: '#fff',
backgroundColor:'#08976d',
borderColor:'#078b64',
fontWeight:400,
padding:50
});
// add image and text to a group
var group = new fabric.Group([img, text], {
left: 0,
top: 0,
});
// add the group to canvas
canvas.add(group);
});
var dataURL = canvas.toDataURL('image/png');
var imgUrl = dataURL.replace(/^data:image\/[^;]/, 'data:application/octet-stream');
console.log(dataURL);
</script>
解决方案
如果您的主要目的只是下载 dataURL 文件,那么您实际上并不需要图像 url。由于图像没有实际存在于任何服务器上,因此它没有图像 url 路径。你可以做这样的事情来下载文件
function downloadFile(uri, name) {
let link = document.createElement("a"); //creates link element
link.download = name; //sets name of the file
link.href = uri; //sets the datauri as the data source of the file
document.body.appendChild(link); //adds it to the dom
link.click(); //trigger a click event
document.body.removeChild(link); //removes it from the dom
delete link; //optional: delete the reference of it from memory
}
downloadFile("data:text/html,HelloWorld!", "helloWorld.txt"); //to call above code
推荐阅读
- visual-studio - 使用生成的符号在反编译源中的断点处发出“未加载符号”通知
- bash - 使用 gnu-parallel 处理文件内容
- r - 如何制作 UDF,用于对数据框中的所有变量进行描述性分析
- javascript - 如何通过制作命令从浏览器控制台获取脚本
- c# - C#:库的 Properties.Settings.Default.ConnectionString 返回临时值
- php - 致命错误:未捕获的错误:找不到类“EthereumRPC\EthereumRPC”
- java - Google 表格 API 异常
- php - 是否可以使用 PHP 在 die() 上重定向?
- python - subprocess.call 正在扩展文件路径
- python - 将字典的内容导出到 amxn 矩阵