Closed
Bug 565843
Opened 15 years ago
Closed 14 years ago
Provide a path between Canvas and the File API
Categories
(Core :: Graphics: Canvas2D, defect)
Core
Graphics: Canvas2D
Tracking
()
RESOLVED
FIXED
mozilla2.0b7
People
(Reporter: khuey, Assigned: khuey)
References
(Blocks 1 open bug)
Details
(Keywords: dev-doc-complete)
Attachments
(1 file, 3 obsolete files)
(deleted),
patch
|
khuey
:
review+
sicking
:
approval2.0+
|
Details | Diff | Splinter Review |
E.g. provide:
void mozLoadFile(in File file)
File mozSaveFile(in string type)
on CanvasRenderingContext2D.
Where for type we accept image/png and any other encoders we have lying around and are willing to provide and throw appropriately on unrecognized types in both directions.
Comment 1•15 years ago
|
||
Should the load really take a File instead of a Blob?
And what exactly would mozSaveFile do?
Assignee | ||
Comment 2•15 years ago
|
||
(In reply to comment #1)
> Should the load really take a File instead of a Blob?
If it took a Blob how would it know what format the image is?
> And what exactly would mozSaveFile do?
Export the contents of the canvas into the requested image format, or throw if that's not possible.
Comment 3•14 years ago
|
||
> If it took a Blob how would it know what format the image is?
The magic number at the start of the data, no? That's what we do anyway; imagelib completely ignores MIME metadata.
> Export the contents of the canvas into the requested image format,
But a File has a whole bunch of stuff like a filename, etc. Where will that come from?
For the output end, I agree it might be good to have a type tag; there has been talk of typed Blobs on the list recently, right?
In the latest drafts, Blobs now have .type and .url, so we should return Blobs
Updated•14 years ago
|
Severity: enhancement → normal
(grumble Blob grumble)
mozLoadFile doesn't actually make sense to me for Canvas 2D -- there's no way to get the dimensions of the image beforehand, for example, so there's no way to resize the canvas to the appropriate dimensions. If this were some kind of magic method that did all that, it would be a little too magic. Seems like what we want is really 'img = new Image(data)'.
mozSaveFile seems fine, though I would call it toBlob (like we have toDataURL). (Actually, I think it should be toDataChunk, but we can have that discussion after sicking/jst/etc. and I talk :-)
Comment 6•14 years ago
|
||
We may gain some advantages by creating a new object ("DataChunk"), per Vlad's proposal (originally made here: https://www.khronos.org/webgl/public-mailing-list/archives/1005/msg00062.html), or we could decide that File and Blob shouldn't have an inheritance relationship. Either way, toBlob (or toDataChunk) makes sense.
The current File draft is here: http://dev.w3.org/2006/webapi/FileAPI/
Assignee | ||
Comment 7•14 years ago
|
||
Not working on this at the moment because of the unresolved issues on how to do this.
Assignee: me → nobody
Status: ASSIGNED → NEW
Assignee | ||
Comment 8•14 years ago
|
||
This patch adds a mozGetAsFile (we can call it mozToFile, or whatever, I really don't care) method to <canvas> that returns the contents of the canvas as a DOMFile, following the same rules as toDataUrl about the type.
The giant blob of tests scares me so I didn't write a test for it yet, but I will later this week. I would appreciate speedy reviews as I'd like to get this into 2.0.
Assignee: nobody → khuey
Status: NEW → ASSIGNED
Attachment #472517 -
Flags: superreview?(jonas)
Attachment #472517 -
Flags: review?(vladimir)
Assignee | ||
Updated•14 years ago
|
tracking-fennec: --- → ?
You can add tests separate from test_canvas (and probably should) -- there are other one-off tests in that directory.
Assignee | ||
Comment 10•14 years ago
|
||
This tests a few quick things. The test that <canvas>.toDataURL == <canvas>.mozGetAsFile().getAsDataURL() covers almost everything of interest, I think, but let me know if I should add more.
Attachment #472519 -
Flags: review?(vladimir)
Assignee | ||
Comment 11•14 years ago
|
||
Two notes:
1. The destructor of nsDOMFile needs to be virtual. With that, all tests pass.
2. We need to sanitize the file name somehow to prevent the page from saying mozGetAsFile("/etc/passwd") because other internal code may rely on the value being of MozFullPath. Maybe we should just give the file a name that isn't a valid filename at all (something with an exclamation point or something) or hardcode a name (canvas.[jpg|png|etc])
Assignee | ||
Comment 12•14 years ago
|
||
Attachment #472517 -
Attachment is obsolete: true
Attachment #472519 -
Attachment is obsolete: true
Attachment #472884 -
Flags: superreview?(jonas)
Attachment #472884 -
Flags: review?(vladimir)
Attachment #472519 -
Flags: review?(vladimir)
Attachment #472517 -
Flags: superreview?(jonas)
Attachment #472517 -
Flags: review?(vladimir)
Assignee | ||
Comment 14•14 years ago
|
||
We need this patch to implement the capture picker in fennec.
tracking-fennec: 2.0- → ?
Comment 15•14 years ago
|
||
review, then request approval2.0.
also -- why not just use a native dialog? isn't that the least amount of risk at this point?
Comment on attachment 472884 [details] [diff] [review]
Consolidated patch
I don't have an opinion of what fennec should use. However this is a great feature that I think is worth exposing to web developers.
Feel free to take my sr as an r if that helps.
Attachment #472884 -
Flags: superreview?(jonas) → superreview+
Assignee | ||
Comment 17•14 years ago
|
||
Fixing a couple minor nits.
Attachment #472884 -
Attachment is obsolete: true
Attachment #475518 -
Flags: review+
Attachment #475518 -
Flags: approval2.0?
Attachment #472884 -
Flags: review?(vladimir)
Attachment #475518 -
Flags: approval2.0? → approval2.0+
Assignee | ||
Comment 18•14 years ago
|
||
Status: ASSIGNED → RESOLVED
tracking-fennec: ? → ---
Closed: 14 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla2.0b7
Updated•14 years ago
|
Keywords: dev-doc-needed
Comment 19•14 years ago
|
||
Now documented, with an example:
https://developer.mozilla.org/en/DOM/HTMLCanvasElement
And mentioned on the Fx4 for developers page.
Keywords: dev-doc-needed → dev-doc-complete
You need to log in
before you can comment on or make changes to this bug.
Description
•