4 ms·
Great breakdown and visuals. Most ASCII filters do not account for glyph shape. It reminds me of how chafa uses an 8x8 bitmap for each glyph: https://github.co
by wonger_ 9mo ago
Great breakdown and visuals. Most ASCII filters do not account for glyph shape.
It reminds me of how chafa uses an 8x8 bitmap for each glyph: https://github.com/hpjansson/chafa/blob/master/chafa/internal/chafa-symbols-ascii-ibm.h https://github.com/hpjansson/chafa/blob/master/chafa/interna...
There's a lot of nitty gritty concerns I haven't dug into: how to make it fast, how to handle colorspaces, or like the author mentions, how to exaggerate contrast for certain scenes. But I think 99% of the time, it will be hard to beat chafa. Such a good library.
EDIT - a gallery of (Unicode-heavy) examples, in case you haven't seen chafa yet: https://hpjansson.org/chafa/gallery/ https://hpjansson.org/chafa/gallery/
- keepamovin 9mo agomy favorite ascii glyphs are the classic IBM Code Page 437: https://int10h.org/oldschool-pc-fonts/fontlist/ https://int10h.org/oldschool-pc-fonts/fontlist/ and damn that article is so cool, what a rabbithole.
- smusamashah 9mo agoBut the chafa gallery isn't showing off ascii text rendering. Are there examples that use ascii text?
- wonger_ 9mo agoGood point. I haven't found many ascii examples online. Here's a copy-paste snippet where you can try chafa-ascii-fying images in your own terminal, if you have uvx: uvx --with chafa-py python -c ' from chafa import * from chafa.loader import Loader import sys img = Loader(sys.argv[1]) config = CanvasConfig() config.calc_canvas_geometry(img.width,img.height,0.5,True,False) symbol_map = SymbolMap() symbol_map.add_by_tags(SymbolTags.CHAFA_SYMBOL_TAG_ASCII) config.set_symbol_map(symbol_map) config.canvas_mode = CanvasMode.CHAFA_CANVAS_MODE_FGBG canvas = Canvas(config) canvas.draw_all_pixels(img.pixel_type,img.get_pixels(),img.width,img.height,img.rowstride) print(canvas.print().decode()) ' \ myimage.jpg But results are not as good as the OP's work. https://wonger.dev/assets/chafa-ascii-examples.png https://wonger.dev/assets/chafa-ascii-examples.png So I'll revise my claim that chafa is great for unicodey colorful environments, but hand-tailored ascii-only work like the OP is worth the effort.
- fwipsy 9mo agoAha! The 8x8 bitmap approach is the one I used back in college. I was using a fixed font, so I just converted each character to a 64-bit integer and then used popcnt to compare with an 8x8 tile from the image. I wonder whether this approach results in meaningfully different image results from the original post? e.g. focusing on directionality rather than bitmap match might result in more legible large shapes, but fine noise may not be reproduced as faithfully.