jq绘图到图像
jqPlot to Image
我知道这个问题在这里已经很糟糕了,但我认为它没有得到正确的回答。到目前为止,我正在使用这种方法,对于我必须进行的任何情节,它 100% 有效。
请评论代码的效率等,我想知道其中是否还有错误。
谢谢。
function jqplotToImg(obj) {
var newCanvas = document.createElement("canvas");
newCanvas.width = obj.find("canvas.jqplot-base-canvas").width();
newCanvas.height = obj.find("canvas.jqplot-base-canvas").height()+10;
var baseOffset = obj.find("canvas.jqplot-base-canvas").offset();
// make white background for pasting
var context = newCanvas.getContext("2d");
context.fillStyle = "rgba(255,255,255,1)";
context.fillRect(0, 0, newCanvas.width, newCanvas.height);
obj.children().each(function () {
// for the div's with the X and Y axis
if ($(this)[0].tagName.toLowerCase() == 'div') {
// X axis is built with canvas
$(this).children("canvas").each(function() {
var offset = $(this).offset();
newCanvas.getContext("2d").drawImage(this,
offset.left - baseOffset.left,
offset.top - baseOffset.top
);
});
// Y axis got div inside, so we get the text and draw it on the canvas
$(this).children("div").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.font = $(this).css('font-style') + " " + $(this).css('font-size') + " " + $(this).css('font-family');
context.fillStyle = $(this).css('color');
context.fillText($(this).text(),
offset.left - baseOffset.left,
offset.top - baseOffset.top + $(this).height()
);
});
} else if($(this)[0].tagName.toLowerCase() == 'canvas') {
// all other canvas from the chart
var offset = $(this).offset();
newCanvas.getContext("2d").drawImage(this,
offset.left - baseOffset.left,
offset.top - baseOffset.top
);
}
});
// add the point labels
obj.children(".jqplot-point-label").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.font = $(this).css('font-style') + " " + $(this).css('font-size') + " " + $(this).css('font-family');
context.fillStyle = $(this).css('color');
context.fillText($(this).text(),
offset.left - baseOffset.left,
offset.top - baseOffset.top + $(this).height()*3/4
);
});
// add the title
obj.children("div.jqplot-title").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.font = $(this).css('font-style') + " " + $(this).css('font-size') + " " + $(this).css('font-family');
context.textAlign = $(this).css('text-align');
context.fillStyle = $(this).css('color');
context.fillText($(this).text(),
newCanvas.width / 2,
offset.top - baseOffset.top + $(this).height()
);
});
// add the legend
obj.children("table.jqplot-table-legend").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.strokeStyle = $(this).css('border-top-color');
context.strokeRect(
offset.left - baseOffset.left,
offset.top - baseOffset.top,
$(this).width(),$(this).height()
);
context.fillStyle = $(this).css('background-color');
context.fillRect(
offset.left - baseOffset.left,
offset.top - baseOffset.top,
$(this).width(),$(this).height()
);
});
// add the rectangles
obj.find("div.jqplot-table-legend-swatch").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.fillStyle = $(this).css('background-color');
context.fillRect(
offset.left - baseOffset.left,
offset.top - baseOffset.top,
$(this).parent().width(),$(this).parent().height()
);
});
obj.find("td.jqplot-table-legend").each(function() {
var offset = $(this).offset();
var context = newCanvas.getContext("2d");
context.font = $(this).css('font-style') + " " + $(this).css('font-size') + " " + $(this).css('font-family');
context.fillStyle = $(this).css('color');
context.textAlign = $(this).css('text-align');
context.textBaseline = $(this).css('vertical-align');
context.fillText($(this).text(),
offset.left - baseOffset.left,
offset.top - baseOffset.top + $(this).height()/2 + parseInt($(this).css('padding-top').replace('px',''))
);
});
// convert the image to base64 format
return newCanvas.toDataURL("image/png");
}
这不是一个错误,但如果您尝试将图像另存为 png,它会为图像生成透明背景。由您来照顾背景图像。
首先感谢您的分享,根据我的测试,它缺少这个脚本:
- 某些类型的图表(甜甜圈)的数据点标签
- 图例色板不见了。
现在有这个选项:https://bitbucket.org/cleonello/jqplot/src/538695e6a66a/src/jqplot.toImage.js?at=default
在此处查看使用我的图表的测试
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 画布数据到图像
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 图像上的HTML绘图地图(圆圈)
- 用绘图/笔触/绘画在画布上显示图像
- jq绘图到图像
- 加载图像以在 javascript 中的画布上绘图
- 如何利用织物画布上的背景图像获取绘图路径中的图像
- 我如何在谷歌地图上添加自己的图像或绘图选项
- FabricJS绘图图像消失
- 如何在我的绘图图像上重叠一个画布圆圈,并设置cordinate和event
- HTML5 Canvas将绘图保存为图像
- 使用Reportgrid作为绘图库,如何在线形图的数据点上显示图像而不是形状