【发布时间】:2016-05-06 00:15:10
【问题描述】:
我正在尝试使用 chrome 扩展来截取当前页面的屏幕截图,然后在其上绘制一些形状。在我对图像完成此操作后,我将整个东西变成了一个画布,就像我在上面绘制的 div 现在被烘焙到“图像”中一样,它们是同一个。完成此操作后,我想将画布重新转换为可用于推送到我拥有的服务的 png 图像,但是当我使用 canvas.toDataURL() 来执行此操作时,它创建的图像源完全是透明。如果我将其作为 jpeg 进行,则它是完全黑色的。
我读到一些关于画布被“弄脏”的信息,因为我已经为它绘制了一个图像,并且这在 Chrome 中不起作用,但这对我来说没有意义,因为我之前已经让它工作了,但我无法使用我以前的方法。下面是无效的代码 sn-p。我只是在制作画布元素,然后在此之前绘制图像。
var passes = rectangles.length;
var run = 0;
var context = hiDefCanvas.getContext('2d');
while (run < passes) {
var rect = rectangles[run];
// Set the stroke and fill color
context.strokeStyle = 'rgba(0,255,130,0.7)';
context.fillStyle = 'rgba(0,0,255,0.1)';
context.rect(rect.left, rect.top, rect.width, rect.height);
context.setLineDash([2,1]);
context.lineWidth = 2;
run++;
} // end of the while loop
screencapImage.className = 'hide';
context.fill();
context.stroke();
console.log(hiDefCanvas.toDataURL());
它返回的图像数据是:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACWAAAAVGCAYAAAAaGIAxAAAgAElEQ…ECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBVKBUe32pNYAAAAElFTkSuQmCC 这是一个空白的透明图像。
我需要对 Chrome 做些什么特别的事情吗?有什么我想念的吗?谢谢,感谢您的时间和帮助。
【问题讨论】:
-
当您注释掉在其上绘制矩形的部分时,它是否正确显示屏幕?
-
@PatrickRoberts 你问我画布是否在没有任何矩形的情况下正确渲染?如果是这样,答案是肯定的,它确实在画布上正确渲染了图像。
-
除非我能看到你所有的相关代码,否则我真的认为我无能为力。仅此,问题就无法重现。
-
@PatrickRoberts 我在查看代码时发现了一些其他问题,所以我可能会偶然发现一个修复程序。我无法发布所有代码,对不起。不过,我很感激你的时间。
-
您是否在控制台中看到安全错误?如果是这样,那就是“污染”问题。如果不是,您可能会在整个图像上绘制矩形,然后填充它们导致图像为空。
标签: javascript angularjs html canvas