TerminalImageViewer/README.md

98 lines
4.3 KiB
Markdown
Raw Normal View History

# TerminalImageViewer (tiv)
2016-04-09 00:59:01 +02:00
Small C++ program to display images in a (modern) terminal using RGB ANSI codes and unicode block graphic characters.
2016-04-09 00:59:01 +02:00
2017-07-11 23:54:44 +02:00
There are various similar tools (such as `timg`) using the unicode half block character to display two 24bit pixels per character cell. This program enhances the resolution by mapping 4x8 pixel cells to different unicode characters, using the following algorithm:
2016-04-09 01:21:06 +02:00
2017-07-11 23:53:40 +02:00
For each 4x8 pixel cell of the (potentially downscaled) image:
2016-04-09 01:21:06 +02:00
1. Find the color channel (R, G or B) that has the biggest range of values for the current cell
2. Split this range in the middle and create a corresponding bitmap for the cell
4. Compare the bitmap to the assumed bitmaps for various unicode block graphics characters
2018-08-03 14:17:38 +02:00
5. Re-calculate the foreground and background colors for the chosen character.
2016-04-09 00:59:01 +02:00
2018-08-03 14:17:38 +02:00
See the difference by disabling this optimization using the `-0` option. Or just take a look at the comparison image at the end of this text.
2017-07-11 22:14:40 +02:00
2019-01-14 21:08:40 +01:00
## News
2018-12-14 20:10:58 +01:00
2019-03-26 21:32:58 +01:00
- 2019-03-26: Exciting week: @Cableo has fixed output redirection, @boretom has added cross-compilation support to the build file and @AlanDeSmet has fixed tall thumbnails and greyscale images.
2019-01-14 21:08:40 +01:00
- 2019-01-14: Install via snap: `sudo snap install --edge tiv`
2020-07-07 12:55:48 +02:00
- 2020-04-09: @aaronliu0130 has added homebrew support.
- 2020-07-05: @cxwx has fixed homebrew support.
2021-05-19 03:25:02 +02:00
- 2021-05-21: @aaronliu0130 has added Apple Clang support.
## Installation
2016-04-09 00:59:01 +02:00
2021-06-14 19:45:53 +02:00
### Build from source (Linux)
2019-01-13 22:47:16 +01:00
2021-06-14 19:45:53 +02:00
sudo apt install imagemagick || yum install ImageMagick
git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make
sudo make install
### Homebrew (MacOS)
Option 1:
2021-05-19 03:29:33 +02:00
```
brew tap stefanhaustein/TerminalImageViewer https://github.com/stefanhaustein/TerminalImageViewer
brew install tiv
```
Option 2(deprecated, for macOS Mojave and below):
```
brew tap stefanhaustein/TerminalImageViewer https://github.com/stefanhaustein/TerminalImageViewer
brew install terminalimageviewer
```
Option 3(deprecated):
```
brew install https://raw.githubusercontent.com/stefanhaustein/TerminalImageViewer/master/terminalimageviewer.rb
```
2019-01-13 22:47:16 +01:00
2021-06-14 19:45:53 +02:00
### Snap (outdated)
sudo snap install --edge tiv
2016-04-09 00:59:01 +02:00
## Usage
2016-04-09 00:59:01 +02:00
2017-07-11 23:53:40 +02:00
tiv [options] <filename(s)>
The shell will expand wildcards. By default, thumbnails and file names will be displayed if more than one image is provided. To display a list of options, just run the command without any parameters.
2016-04-09 00:59:01 +02:00
2018-12-02 23:51:37 +01:00
## Packages / Contributions
- megamaced has created a RPM for SUSE:
https://build.opensuse.org/package/show/home:megamaced/terminalimageviewer
2018-12-08 11:32:13 +01:00
- bperel has created a Docker image:
https://hub.docker.com/r/bperel/terminalimageviewer
2019-01-13 22:47:16 +01:00
- teresaejunior has created a snapcraft.yaml file, which can build a Snap package with `sudo docker run -it --rm -v "$PWD:$PWD" -w "$PWD" snapcore/snapcraft sh -c 'apt-get update && snapcraft'`, and then installed with `sudo snap install --dangerous ./*.snap`.
2020-06-01 14:18:22 +02:00
- aaronliu0130 has added brew support.
2018-12-02 23:51:37 +01:00
2021-08-13 21:09:43 +02:00
I am happy to accept useful contributions under the Apache 2.0 licencse, but...
2020-06-01 14:15:32 +02:00
2021-08-13 21:09:43 +02:00
- Before investing in larger contributions, please use an issue to discuss this
- Pull requests should be as "atomic" as possible. I won't accept any pull request doing multiple things at once.
- This library currently only depends on ImageMagic as an image processing library and I'd prefer to keep it that way.
- Support for additional platforms, CPUs or similar will require somebody who is happy to help with maintenance, in particular, if I don't have access to it.
2020-06-01 14:15:32 +02:00
2016-12-26 12:40:57 +01:00
## Common problems
2016-12-26 12:34:06 +01:00
2021-06-14 19:45:53 +02:00
- On some linux platforms, an extra flag seems to be required: `make LDLIBS=-lstdc++fs` (but it also breaks MacOs), see https://github.com/stefanhaustein/TerminalImageViewer/issues/103
2016-12-26 12:34:06 +01:00
- If you see strange horizontal lines, the characters don't fully fill the character cell. Remove additional line spacing in your terminal app
- Wrong colors? Try -256 to use a 256 color palette instead of 24 bit colors
2020-10-22 06:14:53 +02:00
- Strange characters? Try -0 or install an use full unicode font (e.g. inconsolata or firacode)
2019-03-04 20:11:59 +01:00
2016-12-26 12:40:57 +01:00
## Examples
2016-12-26 12:34:06 +01:00
2018-11-19 11:10:59 +01:00
![Examples](https://i.imgur.com/8UyGjg8.png)
2016-06-22 21:20:47 +02:00
2016-06-23 14:10:47 +02:00
If multiple images match the filename spec, thumbnails are shown.
2018-11-19 11:10:59 +01:00
![Thumbnails](https://i.imgur.com/PTYgSqz.png)
2017-07-11 22:14:40 +02:00
## Comparison to Using Half-Block Characters Only
2018-08-03 14:17:38 +02:00
The top image was generated with the character optimization disabled via the `-0` option.
2017-07-11 23:53:40 +02:00
2018-11-19 11:10:59 +01:00
![Comparison](https://i.imgur.com/OzdCeh6.png)
2019-03-25 16:05:18 +01:00