Using the canvas2d API, you could do it on IE10+ browsers thanks to the imageSmoothingEnabled
parameter :
var c = document.getElementById('c');
var ctx = c.getContext('2d');
var img = document.getElementById('original');
img.src = 'http://lorempixel.com/200/200';
img.onload = function() {
var scale = .1;
//scale down your context matrix
ctx.scale(scale, scale)
// remove the smoothing
ctx.mozImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
// draw a first time your image
ctx.drawImage(img, 0, 0, img.width, img.height);
// reset your context's transformation matrix
ctx.setTransform(1, 0, 0, 1, 0, 0);
// draw your canvas on itself using the cropping features of drawImage
ctx.drawImage(c, 0, 0, img.width * scale, img.height * scale, 0, 0, img.width, img.height)
};
<canvas id="c" width="200" height="200"></canvas>
<img id="original" />
For older browsers which don't support this parameter, you could also do it by yourself by manipulating the imageData got from ctx.getImageData.
A few links :
ctx.imageSmoothingEnabled
ctx.drawImage
ctx.scale
ctx.setTransform
Ps : I'm not sure I got the full requirements, also if you just want an artifacted result, and not a pixellated one, just don't set the imageSmoothingEnabled
flag to false :
var c = document.getElementById('c');
var ctx = c.getContext('2d');
var img = document.getElementById('original');
img.src = 'http://lorempixel.com/200/200';
img.onload = function() {
var scale = .1;
//scale down your context matrix
ctx.scale(scale, scale)
// draw a first time your image
ctx.drawImage(img, 0, 0, img.width, img.height);
// reset your context's transformation matrix
ctx.setTransform(1, 0, 0, 1, 0, 0);
// draw your canvas on itself using the cropping features of drawImage
ctx.drawImage(c, 0, 0, img.width * scale, img.height * scale, 0, 0, img.width, img.height)
};
<canvas id="c" width="200" height="200"></canvas>
<img id="original"/>