Implement Image.loadFromBase64/loadFromBytes/loadFromFile properly on HTML5 (fix #896)

This commit is contained in:
Joshua Granick
2017-01-23 12:49:11 -08:00
parent 76e51a2379
commit b80072febd

View File

@@ -742,13 +742,37 @@ class Image {
var promise = new Promise<Image> ();
// TODO: Handle error, progress
#if (js && html5)
var image = new JSImage ();
fromBase64 (base64, type, function (image) {
image.addEventListener ("load", function (event) {
promise.complete (image);
var buffer = new ImageBuffer (null, image.width, image.height);
buffer.__srcImage = cast image;
});
promise.complete (new Image (buffer));
}, false);
image.addEventListener ("progress", function (event) {
promise.progress (event.loaded, event.total);
}, false);
image.addEventListener ("error", function (event) {
promise.error (event.detail);
}, false);
image.src = "data:" + type + ";base64," + base64;
#else
promise.error ("");
#end
return promise.future;
@@ -759,17 +783,27 @@ class Image {
#if (js && html5)
var promise = new Promise<Image> ();
var type = "";
// TODO: Handle error, progress
fromBytes (bytes, function (image) {
if (__isPNG (bytes)) {
promise.complete (image);
type = "image/png";
});
} else if (__isJPG (bytes)) {
type = "image/jpeg";
} else if (__isGIF (bytes)) {
type = "image/gif";
} else {
throw "Image tried to read PNG/JPG Bytes, but found an invalid header.";
}
return promise.future;
return loadFromBase64 (__base64Encode (bytes), type);
#else
@@ -786,17 +820,31 @@ class Image {
var promise = new Promise<Image> ();
// TODO: Handle progress
var image = new JSImage ();
image.crossOrigin = "Anonymous";
fromFile (path, function (image) {
image.addEventListener ("load", function (event) {
promise.complete (image);
var buffer = new ImageBuffer (null, image.width, image.height);
buffer.__srcImage = cast image;
}, function () {
promise.complete (new Image (buffer));
promise.error ("");
}, false);
image.addEventListener ("progress", function (event) {
});
promise.progress (event.loaded, event.total);
}, false);
image.addEventListener ("error", function (event) {
promise.error (event.detail);
}, false);
image.src = path;
return promise.future;