如何从画布中获取像素数据,其中包含由chrome扩展生成的屏幕截图
How to get pixel data from canvas which contains the screenshot generated by a chrome extension?
我试图实现一个非常简单的颜色选择器chrome扩展。这个想法很简单。
- 利用chrome提供的captureVisibleTab API定期获取当前页面的截图。
- 将此截图加载到画布中,然后为画布上下文使用get getImageData方法并根据鼠标坐标显示像素的颜色值。
我认为这个想法很容易实现,但实际上结果并不那么好。对以下代码片段的任何帮助都是有帮助的:
background.js(工作完美!)
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action == 'capture') {
chrome.tabs.captureVisibleTab(null, null, function(dataUrl) {
sendResponse({ imageUrl: dataUrl });
});
}
return true;
});
content_script.js
function fill_canvas(){
chrome.extension.sendMessage({action: 'capture'}, function(response) {
canvas = document.createElement('canvas');
canvas.width= $(window).width();
canvas.width= $(window).height();
canvasContext = canvas.getContext('2d');
var img = new Image();
img.onLoad = function(){
canvasContext.drawImage(img, 0, 0);
}
img.src = response.imageUrl;
});
}
$(document).ready(function(){
fill_canvas();
$(document).mousemove(function(e) {
pixelData = canvasContext.getImageData(e.offsetX,e.offsetY, 1, 1).data;
console.log(pixelData);
});
});
请期望周围的代码能够正常工作(如简单的激活扩展按钮)和清单中授予的所有相关权限。
pixelData生成的输出如下:
[0, 0, 0, 0, byteLength: 4, byteOffset: 0, buffer: ArrayBuffer, subarray: function, set: function…]
一打开就包含了很多信息,除了我需要的那个。
干杯!
由于javascript是大小写敏感的,您的onLoad
将永远不会踢(没有骆驼大小写事件)。试着把它小写:
// onload not onLoad
img.onload = function(){
canvasContext.drawImage(img, 0, 0);
}
我还注意到您将画布和上下文放在全局作用域(窗口)上。我猜(我不熟悉Chrome的扩展api), api阻止或隔离窗口对象(密封或冻结它)。
修改这些,我很确定,没有/测试,它会工作:
//use 'var' in front
var canvas = document.createElement('canvas');
var canvasContext = canvas.getContext('2d');
或在此函数之外定义它们(如果已经这样做,则不显示)。
相关文章:
- 使用多功能框在 chrome 扩展程序中包含内联自动填充功能的任何方法
- 从chrome扩展创建一个包含POST数据的链接
- 如何禁用Chrome扩展中包含的脚本
- Chrome扩展-当我包含jQuery库时,JS为什么会抱怨
- 如何在chrome扩展的内容脚本中包含addEventListener
- 如何在我的Chrome扩展中包含外部对象
- Chrome.tabs.executeScript()和包含的文件
- 请求有关修改 .js 脚本以在 chrome 中包含打开标签页的帮助
- 如何在Chrome扩展名的内容JS文件中包含其他JavaScript文件
- Chrome Javascript:自动点击包含特定文本的链接
- 为什么JavaScript包含属性在Chrome浏览器中不起作用
- 需要防止在 chrome 浏览器上显示“此页面包含不安全的内容”消息
- 如何在优胜美地中打开一个新的Chrome窗口,其中包含javascript自动化
- Chrome 打开包含网址的标签页
- 包含照片幻灯片的 iframe 会在 Chrome 上中断
- Chrome扩展程序修改页面的脚本包含和JS
- 如何在Chrome Packaged应用程序的background.js中包含Chrome Javascript API
- 使用Chrome Devtools查找哪个变量包含一个值
- 检测Chrome扩展内容脚本是否已注入/内容脚本是否包含保护
- 计算safari和chrome中svg路径的getBBox()中包含的控制点