In converting the costume to black and white, you use black pixels and adjust their transparency instead of actually using grayscale (R=G=B). This doesn't really matter if you're using the resulting costume only to compute the text version, I suppose, but it's wrong if you actually want to use a b&w costume. I'm guessing you do it that way because you want the pixels outside the actual costume but inside its bounding box to be transparent. That's a clever hack, but it's not so good if there's a white region inside the costume; you'd want that white, not transparent. And against a non-white background the pixels will be visibly transparent rather than gray. I don't have a brilliant way to fix this; maybe stamp the costume on the stage and FILL its exterior with two different colors and if a post-fill pixel agrees with the fill color both times, it's in the exterior and should be made transparent. Either that or send a sprite from the costume's rotation center to the edge of the screen, then come back in until you see a non-white pixel.
I'm skeptical about your ink-density scales, especially scale 1. You have capital Q as lighter than capital O, which is a subset of it. Similarly, you have + lighter than -, which also can't be true. You, or someone, should make a project that systematically counts the number of black pixels in every character of the font, or at least every ASCII character, and use that information to improve the scales.
scale #1 come from here (1st link i click on google: personnaly, i don't like the result... maybe, if you draw a 10000 x 10000 picture on the wall with caracters, it will be better than # 3, but when we draw a small image (here: 53 lines, 96 caracters per lines), i think we need smaller set of caracters for the density like scale #3)(better contrast)
Personnally, i think the best one is #3 but i don't try so much sets of caracters...
you can make you proper experience just write your own sequence in the block, don't forget to finish the sequence with one space(or two or three: make your own experience) for completely white.
the b/w costume is bunch of black pixels (rgb=0,0,0). The alpha of each pixels (transparency) is the avarage of the 3 rgb channels of theses pixels. The result: a bunch of black pixel with a transparentcy (0-255).
After that, i keep the alpha or each pixels (0-255) and i convert it (the remap function: )
In an image in snap format, a transparent pixel the rgba is 0,0,0,0, i threat this like white in this project.