There are a few jQuery plugins that do this, but I didn’t want to add external dependencies, and this was a good excuse to play with the
I tried using
drawImage to upscale part of the image, but browsers seemed to apply bilinear or bicubic interpolation by default, which resulted in a blurry mess. Not all browsers supported the
imageSmoothingEnabled property at the time of writing, so I ended up implementing nearest-neighbor interpolation by hand.