In my extension I'd like to manipulate some images. So I'm trying to read their raw pixels using canvas.
The problem is that if, in chrome code, I execute (img
is an image in a content document):
var src = document.createElement("canvas");
src.width = img.naturalWidth;
src.height = img.na开发者_Python百科turalHeight;
var srcCtx = src.getContext("2d");
on the last line it says that getContext
is not a function.
On the other hand if I run (notice that the first line is different!):
var src = img.ownerDocument.createElement("canvas");
src.width = img.naturalWidth;
src.height = img.naturalHeight;
var srcCtx = src.getContext("2d");
srcCtx.drawImage(img, 0, 0);
var src_data = srcCtx.getImageData(0, 0, src.width, src.height);
no error is returned, but src_data
comes out empty. I suppose it may have something to do with accessing web content from chrome code. Any suggestion?
I suspect the problem with the first snippet is that document
is a XUL document, so its createElement
function will create a XUL element and there is no such thing as a XUL:canvas. It is possible to create HTML elements in a XUL document, but then you'll want to use createElementNS(). To be more clear the code would look like
document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
Why src_data
comes out empty though, I don't know.
As I said above, the problem was in a different piece of code.
It was actually due to the fact that I misread the documentation and thought that src_data
was supposed to contain the pixels, whereas it should have been src_data.data
. For some reason that I can't understand printing out uneval(src_data)
would return ({})
instead, whereas in it there should be three members, data
, width
and height
.
I think you should use
content.document.createElement()
精彩评论