xref: /aosp_15_r20/external/webp/webp_js/index.html (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1*b2055c35SXin Li<!DOCTYPE html>
2*b2055c35SXin Li<html lang="en">
3*b2055c35SXin Li
4*b2055c35SXin Li<head>
5*b2055c35SXin Li  <meta charset="UTF-8">
6*b2055c35SXin Li  <title>simple Javascript WebP decoding demo</title>
7*b2055c35SXin Li  <script type="text/javascript">
8*b2055c35SXin Li    var Module = {
9*b2055c35SXin Li      noInitialRun : true
10*b2055c35SXin Li    };
11*b2055c35SXin Li  </script>
12*b2055c35SXin Li  <script type="text/javascript" src="./webp.js"></script>
13*b2055c35SXin Li  <script type="text/javascript">
14*b2055c35SXin Li
15*b2055c35SXin Li'use strict';
16*b2055c35SXin Li
17*b2055c35SXin Li// main wrapper for the function decoding a WebP into a canvas object
18*b2055c35SXin Livar WebpToCanvas;
19*b2055c35SXin Li
20*b2055c35SXin Lifunction init() {
21*b2055c35SXin Li  WebpToCanvas = Module.cwrap('WebPToSDL', 'number', ['array', 'number']);
22*b2055c35SXin Li}
23*b2055c35SXin Liwindow.onload = init;
24*b2055c35SXin Li
25*b2055c35SXin Lifunction decode(webp_data, canvas_id) {
26*b2055c35SXin Li  // get the canvas to decode into
27*b2055c35SXin Li  var canvas = document.getElementById(canvas_id);
28*b2055c35SXin Li  if (canvas == null) return;
29*b2055c35SXin Li  // clear previous picture (if any)
30*b2055c35SXin Li  Module.canvas = canvas;
31*b2055c35SXin Li  canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
32*b2055c35SXin Li  // Map this canvas to the default selector used by emscripten/SDL2.
33*b2055c35SXin Li  specialHTMLTargets["#canvas"] = Module.canvas;
34*b2055c35SXin Li  // decode and measure timing
35*b2055c35SXin Li  var start = new Date();
36*b2055c35SXin Li  var ret = WebpToCanvas(webp_data, webp_data.length);
37*b2055c35SXin Li  var end = new Date();
38*b2055c35SXin Li  var speed_result = document.getElementById('timing');
39*b2055c35SXin Li  // display timing result
40*b2055c35SXin Li  if (speed_result != null) {
41*b2055c35SXin Li    var decode_time = end - start;
42*b2055c35SXin Li    speed_result.innerHTML = '<p>decoding time: ' + decode_time +' ms.</p>';
43*b2055c35SXin Li  }
44*b2055c35SXin Li}
45*b2055c35SXin Li
46*b2055c35SXin Lifunction loadfile(filename, canvas_id) {
47*b2055c35SXin Li  var xhr = new XMLHttpRequest();
48*b2055c35SXin Li  xhr.open('GET', filename);
49*b2055c35SXin Li  xhr.responseType = 'arraybuffer';
50*b2055c35SXin Li  xhr.onreadystatechange = function() {
51*b2055c35SXin Li    if (xhr.readyState == 4 && xhr.status == 200) {
52*b2055c35SXin Li      var webp_data = new Uint8Array(xhr.response);
53*b2055c35SXin Li      decode(webp_data, canvas_id);
54*b2055c35SXin Li    }
55*b2055c35SXin Li  };
56*b2055c35SXin Li  xhr.send();
57*b2055c35SXin Li}
58*b2055c35SXin Li  </script>
59*b2055c35SXin Li</head>
60*b2055c35SXin Li
61*b2055c35SXin Li<body>
62*b2055c35SXin Li  <p>
63*b2055c35SXin Li    <strong>WebP in JavaScript demo</strong> -
64*b2055c35SXin Li  </p>
65*b2055c35SXin Li  <p>
66*b2055c35SXin Li    WebP decoder in JavaScript, using libwebp compiled with
67*b2055c35SXin Li    <a href="https://github.com/kripken/emscripten/wiki">Emscripten</a>.
68*b2055c35SXin Li  </p>
69*b2055c35SXin Li  <p id="image_buttons">
70*b2055c35SXin Li    <input type="button" value="test image!" name="./test_webp_js.webp"
71*b2055c35SXin Li           onclick="loadfile(this.name, 'output_canvas')">
72*b2055c35SXin Li  </p>
73*b2055c35SXin Li  <p id="timing">Timing: N/A</p>
74*b2055c35SXin Li  <canvas id="output_canvas">Your browser does not support canvas</canvas>
75*b2055c35SXin Li
76*b2055c35SXin Li</body>
77*b2055c35SXin Li</html>
78