We used a 9-pin dot matrix receipt printer for our retail store point-of-sale system for nearly 30 years, so I understand what they can and cannot do. A thermal printer common today is fundamentally the same. It prints black dots in a rectangular array typically 80 to 100 dots per inch, and that cannot be changed.
Those dots are either black or not there - there is no "grey". So that's a challenge for trying to get photos done with any reasonable range of dot darkness and image resolution. Now, using a common black-and-white laser printer that also can do only black or not, the dot size and spacing is typically 300 dpi, often much higher. But even at 300 dpi, what really happens is that the image is broken up into square "cells" of 8 x 8 dots, so you can print 37½ cells per inch on the page. Each cell can be printed with any of 8x8=256 possible dot patterns, so one can produce 256 levels of "grey', from white to black. Using a resolution of 37½ cells per inch at 256 grey levels per cell can produce a reasonable "black and white" photo. Double the basic printer resolution to 600 dpi and the photo becomes pretty good. BUT with 80 dpi on a thermal printer your 8x8 cell would be 1/10 " square, or 10 cells per inch, and the photo would look terrible even though each cell had 256 possible grey levels. So such printers were never designed to try to do that job, and do not have enough buffer memory for a data stream that huge.
Further, the process of breaking up the photo image into cells, translating each cell into an 8x8 dot pattern to produce a particular grey and then sending that all out is not done by the application software you use. It is done by the printer driver supplied by the printer maker. Since a thermal printer cannot produce any decent photo, the driver supplied has NO such routines to make it do the impossible.
The printer we used for this purpose had a lot of ability. It contained several alphabet sets, so you could set it to use one of those to specify what dot pattern it printed for any particular character code it received. It could change horizontal and vertical character spacing over a few possibilities. It could print reverse text - white characters on a black background. It could printer any arbitrary dot pattern you sent it for every 9-dot-high printing space, so in that way you could do basic graphics. I had ours set up to print (as an array of black dots on the white paper) our store's name logo at the top of each receipt. But I had to create that dot matrix image and store it in the point-of-sale software - there was no printer driver to create that data representation. The result looked good for that technology, but it was no photograph!