Skip to main content

Convert images to unicode based on font templates. Especially usable in terminal.

Project description

img2unicode

A tool to display images as Unicode in your terminal. The library is currently optimized for Ubuntu Mono font rendered by libvte (Gnome Terminal, Terminator etc.) i.e. it works on stock Ubuntu.

pip install img2unicode
imgcat image.jpg

Installation

You can install img2unicode via pip from PyPI:

$ pip install img2unicode

If you want to utilize FastGammaOptimizer, install the optional n2 dependency:

$ pip install 'img2unicode[n2]'

Note that ExactGammaOptimizer is more portable, yet much slower. Use BestGammaOptimizer alias to choose automatically between these two.

Usage

import img2unicode
# Use Unicode Block Elements
optimizer = img2unicode.FastGenericDualOptimizer("block")
renderer = img2unicode.Renderer(default_optimizer=optimizer, max_h=60, max_w=160)
renderer.render_terminal('examples/obama.jpg', 'obama-block.txt')

# Pair Renderer to Optimizer
optimizer = img2unicode.FastGammaOptimizer("no_block") # Or ExactGammaOptimizer
renderer = img2unicode.GammaRenderer(default_optimizer=optimizer, max_h=60, max_w=160)
renderer.render_terminal('examples/obama.jpg', 'obama-noblock.txt')

pil_image = renderer.prerender('examples/obama.jpg')
pil_image.save('obama-rendered.png')

# Use own mask: it may be name from common masks (see source), slice or numpy bool array.
ascii_optimizer = img2unicode.FastGammaOptimizer(slice(32, 127), use_color=False)
# Get the characters, foreground and background colors. Use non-default optimizer.
chars, fores, backs = renderer.render_numpy('examples/obama.jpg', optimizer=ascii_optimizer)

Optimizers

Here is a quick comparison of the most usable optimizers:

FastQuadDualOptimizer() FastGenericDualOptimizer ("block") FastGammaOptimizer (charmask="no_block") FastGammaOptimizer (charmask="no_block", use_color=False)
Choses from 4-pixel characters like ▚ Optimizes foreground/background for whole Unicode Block Elements. Optimizes foreground color for all Unicode rendered in single cell. Same, but does't use terminal colors.
Good color representation Good color and crisper image Crisp edges with black Pure art, no color.
Foreground & background Foreground & background Just foreground No color
~5Hz ~4Hz ~1Hz ~2Hz
O(S*T), T=7 O(S*T), T=24 O(S*log(T)), T=5553 O(S*log(T)), T=5553

Where S is the number of 16x8 pixel samples to optimize for and T is the number of templates.

See it yourself

Use the included termview script to browse images with all renderers. First, install the optional dependency:

$ pip install 'img2unicode[termview]'

then execute:

termview examples/obama.jpg

termview demo

or use imgcat to display an image in your terminal:

imgcat examples/obama.jpg

More samples

To see how other optimizers compare to each other, see examples/README.md.

To see more eyecandy of photos, videos and plots, see the matrach/img2unicode-demos repo

TODO

  • write more docs, document code
  • describe how it works in readme
  • solve foreground & background optimization sublinear in templates
  • add support for Unicode 13 Legacy Computing block
  • add support for edges optimization in FastDualGenericOptimizer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

img2unicode-0.1a8.tar.gz (19.8 MB view details)

Uploaded Source

Built Distribution

img2unicode-0.1a8-py3-none-any.whl (19.8 MB view details)

Uploaded Python 3

File details

Details for the file img2unicode-0.1a8.tar.gz.

File metadata

  • Download URL: img2unicode-0.1a8.tar.gz
  • Upload date:
  • Size: 19.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.23.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.0

File hashes

Hashes for img2unicode-0.1a8.tar.gz
Algorithm Hash digest
SHA256 75c914d9c731f48806326ac528447af693b59114c2f0e28c6f384477e2ef89d7
MD5 502ba12ef00e35b48172cd1e05f462dc
BLAKE2b-256 d0450221cfd003f547ca5613ca92e1e33cd848461086afad6fa838b12188f2d5

See more details on using hashes here.

File details

Details for the file img2unicode-0.1a8-py3-none-any.whl.

File metadata

  • Download URL: img2unicode-0.1a8-py3-none-any.whl
  • Upload date:
  • Size: 19.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.23.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.0

File hashes

Hashes for img2unicode-0.1a8-py3-none-any.whl
Algorithm Hash digest
SHA256 24d930066b269d75b92e68765fe202404f17ad165e88576d52f053ab3ff2e012
MD5 000efc5a28c99d680d8f9dbd82545289
BLAKE2b-256 ce8ef923259d3045fff8b2339e86ed37fad9a95475f5fdb346b28f2532f3d0f3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page