<!DOCTYPE html> JPEG image RGB pixels should render without color corruption and in strict<br> order, regardless of the underlying machine pixel buffer endianess.<br><br> <img src="resources/rgb-jpeg-red.jpg" onload="test(this, [255,0,0,255])"> <img src="resources/rgb-jpeg-green.jpg" onload="test(this, [0,255,0,255])"> <img src="resources/rgb-jpeg-blue.jpg" onload="test(this, [0,0,255,255])"> <pre id="log">PASS</pre> <script> if (window.testRunner) { window.testRunner.waitUntilDone(); window.testRunner.dumpAsText(); } function log(message) { document.getElementById("log").textContent += '\n' + message; } function averagePixelComponents(data, size) { var r = 0, g = 0, b = 0, a = 0; for (var i = 0, total = size * 4; i < total; i += 4) { r += data[i + 0]; g += data[i + 1]; b += data[i + 2]; a += data[i + 3]; } return [r / size, g / size, b / size, a / size]; } function averagePixelShouldBe(pixel, expect, tolerance) { var delta = 0; pixel.forEach(function(component, i) { delta = Math.max(Math.abs(pixel[i] - expect[i]), delta); }); if (delta > tolerance) log('FAIL: [' + pixel + '] expected [' + expect + '] +/- ' + tolerance); } function testImage(image, expect) { // Create a canvas, load the given image in it. var canvas = document.createElement("canvas"); canvas.width = canvas.height = 64; var context = canvas.getContext("2d"); context.drawImage(image, 0, 0); // Compare the canvas pixel component averages. var pixels = context.getImageData(0, 0, 64, 64).data; var result = averagePixelComponents(pixels, 64 * 64); var pixelTolerance = 3; averagePixelShouldBe(result, expect, pixelTolerance); } function test(image, expect) { try { loadedImages = window.loadedImages || 0; testImage(image, expect); if (++loadedImages < 3) return; } catch (e) { log('FAIL: ' + e.message); } if (window.testRunner) window.testRunner.notifyDone(); } </script>