Browser's native canvas.drawImage() method uses the nearest-neighbor algorithm which is very fast but produces low quality images (with aliasing and Moiré patterns, etc.) For higher quality, a different algorithm should be used -- this page demos downscaling using averages, similar to the box sampling algorithm. Canvas