aboutsummaryrefslogtreecommitdiff
path: root/src/library_browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/library_browser.js')
-rw-r--r--src/library_browser.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/library_browser.js b/src/library_browser.js
new file mode 100644
index 00000000..ccc13698
--- /dev/null
+++ b/src/library_browser.js
@@ -0,0 +1,50 @@
+// Utilities for browser environments
+
+mergeInto(Library, {
+ $Browser: {
+ syncLoad: function(url) {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url, false);
+ xhr.send(null);
+ var buffer = xhr.mozResponseArrayBuffer;
+ return new Uint8Array(buffer);
+ },
+
+ // Given binary data for an image, in a format like PNG or JPG, we convert it
+ // to flat pixel data. We do so using the browser's native code.
+ decodeImage: function(pixels, format) {
+ function encodeBase64(data) {
+ var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+ var PAD = '=';
+ var ret = '';
+ var leftchar = 0;
+ var leftbits = 0;
+ for (var i = 0; i < data.length; i++) {
+ leftchar = (leftchar << 8) | data[i];
+ leftbits += 8;
+ while (leftbits >= 6) {
+ var curr = (leftchar >> (leftbits-6)) & 0x3f;
+ leftbits -= 6;
+ ret += BASE[curr];
+ }
+ }
+ if (leftbits == 2) {
+ ret += BASE[(leftchar&3) << 4];
+ ret += PAD + PAD;
+ } else if (leftbits == 4) {
+ ret += BASE[(leftchar&0xf) << 2];
+ ret += PAD;
+ }
+ return ret;
+ }
+ var img = new Image();
+ var canvas = document.createElement('canvas');
+ img.src = 'data:image/' + format + ';base64,' + encodeBase64(pixels);
+ var ctx = canvas.getContext('2d');
+ ctx.drawImage(Module.img, 0, 0);
+ var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+ return imageData;
+ },
+ }
+});
+