WARNING! THIS PAGE CREATES A HONKING-BIG HTML5 CANVAS, AND MIGHT SLOW YOUR BROWSER DOWN. A LOT.
Just follow the instructions, and enjoy!
Choose an image from your hard disk to print. All of the processing and image generation will take place in your browser – nothing will be uploaded anywhere.
Below, you will see the bitmap that will be sent to the "printer". The printer has two modes, a 480-dot mode (the default) which yields a print with 60dpi horizonatal resolution, and a 960-dot mode which yields a print with 120dpi horizontal resolution. In both modes, the vertical resolution is 72dpi. As this is a nonsquare pixel aspect ratio, the input image is automatically squashed/stretched to compensate. If your input image is small enough (< 720px tall and < 480px or 960px wide) you can disable this adjustment, although the image in your "print" will appear squashed or stretched.
Additionally, you may want to adjust the dithering applied to the input image with the Brightness and Contrast controls.
The output image produced by this script is 720dpi – that's a couple hundred megabytes in memory, so if your hard disk thrashes around a bit while it's printing, that's normal. Also, it's being scaled-down for display by your browser, which may not do a very good job of it, so I recommend saving the image to your hard disk (right-click on it, select "Save Image As...") and viewing it with your favourite image viewer, where you will be dazzled by its beauty.
Again, if you want to save the output image, just right-click on it and "Save Image As...", just like you would any other image.
This started out as a Perl script I wrote one afternoon a couple of years ago (which is still available: http://laemeur.com/dotmat). I had been making some low-res bitmap art and wondered what it might look like printed on an old dot-matrix printer, but I didn't have one handy. However, I did have a pretty good idea of how I could fake it, by "printing", dot-for-dot, in a program. So I did.
The Perl script was slow, and you had to do all of the bitmap conversion and dithering using other programs. It was sort-of a pain. I'd wanted to re-write it as an easier-to-use web thingie for a long time, and ...now I've done that!
I learned how dithering works by reading this great article by Tanner Helland: http://www.tannerhelland.com/4660/dithering-eleven-algorithms-source-code/.
The capabilities of the virtual printer that this tool simulates correspond more-or-less to those of an Epson MX-80 printer with the Graftrax-80 upgrade. The Internet Archive has a copy of the Graftrax-80 manual here: https://archive.org/details/Graftrax-80_1981_Epson_America.
The license for the code is in the source.