diff --git a/examples/image_decoders/fish.jpg b/examples/image_decoders/fish.jpg
new file mode 100644
index 000000000..aa5fbd0d9
Binary files /dev/null and b/examples/image_decoders/fish.jpg differ
diff --git a/examples/image_decoders/jpeg_viewer.html b/examples/image_decoders/jpeg_viewer.html
new file mode 100644
index 000000000..47af71b0d
--- /dev/null
+++ b/examples/image_decoders/jpeg_viewer.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+ PDF.js standalone JpegImage parser
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/image_decoders/jpeg_viewer.js b/examples/image_decoders/jpeg_viewer.js
new file mode 100644
index 000000000..5bc81ecf3
--- /dev/null
+++ b/examples/image_decoders/jpeg_viewer.js
@@ -0,0 +1,75 @@
+/* Copyright 2018 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+'use strict';
+
+if (!pdfjsImageDecoders.JpegImage) {
+ alert('Please build the pdfjs-dist library using `gulp dist-install`');
+}
+
+var JPEG_IMAGE = 'fish.jpg';
+
+var jpegCanvas = document.getElementById('jpegCanvas');
+var jpegCtx = jpegCanvas.getContext('2d');
+
+// Load the image data, and convert it to a Uint8Array.
+//
+var nonBinaryRequest = false;
+var request = new XMLHttpRequest();
+request.open('GET', JPEG_IMAGE, false);
+try {
+ request.responseType = 'arraybuffer';
+ nonBinaryRequest = request.responseType !== 'arraybuffer';
+} catch (e) {
+ nonBinaryRequest = true;
+}
+if (nonBinaryRequest && request.overrideMimeType) {
+ request.overrideMimeType('text/plain; charset=x-user-defined');
+}
+request.send(null);
+
+var typedArrayImage;
+if (nonBinaryRequest) {
+ var str = request.responseText, length = str.length;
+ var bytes = new Uint8Array(length);
+ for (var i = 0; i < length; ++i) {
+ bytes[i] = str.charCodeAt(i) & 0xFF;
+ }
+ typedArrayImage = bytes;
+} else {
+ typedArrayImage = new Uint8Array(request.response);
+}
+
+// Parse the image data using `JpegImage`.
+//
+var jpegImage = new pdfjsImageDecoders.JpegImage();
+jpegImage.parse(typedArrayImage);
+
+var width = jpegImage.width, height = jpegImage.height;
+var jpegData = jpegImage.getData(width, height, /* forceRGB = */ true);
+
+// Render the JPEG image on a