如何让我的终端显示图形图片?

这是我快速拼凑起来的一个模型。我想象它会非常酷和有用。
这样的东西已经存在了吗?

http://imgur.com/Z3DbS


7我总是只用feh!我知道它不是在终端里,但它能完成任务。 - dylnmc
终端不适用于图形显示,它只能显示Unicode字符,并进行一些着色。你所能得到的最好结果就是ASCII艺术。 - Ben
1我喜欢使用终端进行图形处理,itermplot 是仅适用于 macOS 的工具。 - miku
这个问题是因为Homebrew中的小啤酒图像而产生的动机吗?那是一个表情符号。 - Liz Av
如果你在Ubuntu服务器上,想要在Mac上查看它们,这个方法非常好用:https://unix.stackexchange.com/a/457076/7000 - Sridhar Sarnobat
@Dennkster 如果你找到合适的工具,请提及一下。 - milad
15个回答

更新于2021年03月02日

Viu

Viu是一款图像查看器,可以使用kitty、iterm或libsixel等方式显示图像。它还具有回退模式,可以显示方块状ASCII图像。


更新于2018年12月31日

kitty icat

全能终端模拟器kitty具有一个icat命令用于显示图像(在tmux中不起作用)。Kitty还可以在ranger(终端文件管理器)中启用图像预览,这是我目前最常使用的方法(在tmux中有效)。


1. w3m
虽然w3m的主要目的是提供控制台中的网页浏览,但它也可以用于在终端中查看图片。安装相关软件包需要安装w3m和w3m-img(至少在Ubuntu上)。然后,您需要通过传递“-o ext_image_viewer=0”或进入w3m内部的选项菜单('o')来禁用外部图像查看器,并禁用外部图像查看。
现在,在终端中键入 w3m <image_name> 将显示图像。 w3m 将使用整个终端窗口,因此在退出 w3m 之前,您无法看到先前的命令(类似于 less,而不是 cat)。请注意,如果图像太大而无法适应终端窗口,则仍将在外部打开(对我来说是在 imagemagick 中)。还请注意,尽管我在多个地方读到 w3m 内联图像在 gnome-terminal 上无法工作,但对我来说却很好用。有点烦人的是,您必须输入两次 q 才能先关闭图像,然后关闭 w3m

2. 术语

tycatterminology 的一部分,它像 cat 显示文本文件一样显示图像,并且像 imgcat 在 OS X 上适用于 iTerm2。

3. libsixel + mlterm/xterm

安装 libsixel-bin 以及任何兼容的终端(在此 readme 的'Requirements'中提到的示例, 例如带有正确标志编译的mltermxterm),您可以使用img2sixel命令查看图像。这两个软件包都可以在 Ubuntu 软件源中找到。

4. FIM

然后还有FIM,它是fbi的改进版本。主页上说它不仅可以使用帧缓冲显示图像,还可以使用X显示图像。但是,它在我的电脑上无法安装。编辑我通过下载0.5 trunk版本,运行./configure --disable-exif,然后暂时从路径中移除anaconda(Python发行版),因为它与libpng冲突,然后运行makesudo checkinstall来使其运行起来(你需要手动写入一个版本号到checkinstall,但这样比make install更容易删除)。然而,图像仍然会在一个单独的窗口中显示,尽管像fbi一样,你不需要运行X,这很酷。

5. jupyter-qtconsole

您还可以发挥创意,将jupyter-qtconsole用作系统控制台,配置它以内联显示图形(%matplotlib inline),然后使用matplotlib =)显示图像

6. feh

feh 使用X来显示图像,但 feh-x 会在无边框窗口中弹出它们,可以快速用 q x 关闭。虽然图像并非直接在终端中显示,但我认为值得一提,因为这是我迄今发现的最不侵入性的方式,也是我使用的方式,直到 gnome-terminal 获得了 imgcat / tycat 相当于。

w3m正在使用caca-utils,所以最好直接使用它(cacaview e.jpg)。 - user1133275
在Ubuntu 19.10上,apt install libsixel-bin mlterm; mlterm; img2sixel test.jpg 可以正常工作!我也尝试了xterm,但是没有输出。 - rubo77
@user1133275 实际上它们都使用 imlib2,所以似乎并没有太大关系 ;) - xeruf

也许 caca 是你想要的。对于图片
sudo apt-get install caca-utils
cacaview /PATH/TO/image.jpg

确保您的终端窗口足够大。
例如,这是在中显示this image的方式:

Screenshot

我有时候会用它来玩,用mplayer观看ASCII视频 :) 就像这样:
mplayer -vo caca /PATH/TO/video.mpg

8非常有用 - caca-utils中的一个命令应该在终端中内联显示图像是img2txt - Wilf
10现在场上有一个新的玩家:https://github.com/ichinaski/pxl --- 在快速测试中,图片看起来比cacaview更好。(我想添加一个新的回答,但是网站不让我?) - user569825
以ASCII形式观看视频” 但是...为什么呢? - Derek 朕會功夫
2这会打开另一个窗口。OP要求终端。我认为你应该建议使用img2txt。 - phil294
这取决于你的环境。在非X终端中,它会如预期般打开。在X中也可能有解决方案。我猜这可能取决于所使用的终端或其尺寸。 - user569825
4“以ASCII形式观看视频”但是...为什么呢?因为你想要吗?因为你只能通过终端来窥视视频吗?因为如果你不需要某样东西,并不意味着其他人也会跟随。” - Marcin Orlowski
mpv的命令行示例是什么,比如针对像foobar.png这样的图片? - shevy
mpv --quiet --vo tct VIDEO.mp4 @shevy; @Derek朕會功夫 只是因為。不過我有一個在沒有X11的情況下運行的系統。在這種情況下,它比完全沒有視頻的播放效果更好。@dsstorefile1:很好的提示! - user569825
这看起来像是90年代的色情片。 - Martin
我仍然喜欢ASCII美学,因此可以使用mpv --quiet --vo caca VIDEO.mp4命令。 - luckyging3r
我收到了“sudo:apt-get:命令未找到”的错误信息? - MicroMachine
apt-get或者现在也可以使用apt,是针对基于Debian的发行版,比如Ubuntu。你可能不是在这样的发行版上。请问你使用的是哪个Linux系统? - user569825
我不会安装名为“caca”的东西。 - simon

我写了一个小的C++工具,用于将图像转换为支持ANSI RGB控制码和Unicode块图形字符的现代终端。安装方法如下:
git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make
sudo make install

使用方法:

tiv <image(s)>

编辑:更改了主要存储库的链接/说明;添加了用法。

示例:

TerminalImageViewer


2这看起来非常不错!但是它是用Java还是C++编写的? - Andrea Lazzarotto
7过去它是用Java实现的,但是对于这个简单任务来说需要一个JVM让我感到不爽,所以我把它移植到了C++(尽管截图仍然显示Java命令)。 - Stefan Haustein
4比Cacaview好多了! - Piotr Dabkowski
1这是一个很棒的工具。虽然速度较慢,但比caca好多了。在使用“256位模式”时会有质量损失吗?(因为我必须使用它,普通模式出问题了) - phil294
256色模式只使用了256种固定颜色(8位)-- 它比24位RGB模式要差得多。 - Stefan Haustein
3非常好的结果!谢谢!在没有 X 服务器的情况下,使用 SSH 非常有用! - Arnaud De Broissia
对我来说,它没有起作用。更多详细信息请参阅:https://gist.github.com/nahiyan/09f7b4a2f111d75e100c636e2b6a2af6 - Nahiyan
这是唯一在SSH上对我有效的解决方案(两台机器都是Ubuntu 18.04)。 - Jeppe

我制作了一个非常快速、简单的一行Shell函数,完全按照模型要求解决了原始问题。请注意下面的屏幕截图是实际图片,而不是模型。
function lsix() { montage -tile 7x1 -label %f -background black -fill white "$@" gif:- | convert - -colors 16 sixel:-; }

Screenshot of using the lsix command

先决条件很简单:xterm和ImageMagick(apt-get install xterm imagemagick)。您的xterm必须处于vt340模式,您可以在~/.Xresources中设置,也可以从命令行中设置(xterm -ti vt340)。
限制:所有显示的图像只使用16种颜色。这意味着,单独查看某个图像时可能会更好看。(见下文)。

Screenshot showing 16 color limitation

更新

尽管我上面的回答仍然正确,但我创建了一个更好的shell脚本,可以直接在终端中执行“ls”命令来列出图像。我添加了各种改进措施,使图像看起来更好(更多颜色,透明度正常,JPEG方向,处理大量图像,紧凑的平铺布局等)。这仍然是一个相对较小的程序,但我想人们可能想要自定义它,所以我将其放在了github上:https://github.com/hackerb9/lsix


你不能在终端窗口中这样做,但是你可以在Linux控制台中使用fbi来实现。你需要一个帧缓冲区才能使其正常工作:
sudo apt-get install fbi

进入 Linux 控制台(使用 Ctrl+Alt+F1),然后输入 fbi <filename>

它应该显示您的图片。


5“终端”和“tty”有什么区别?它们不是同一回事吗? - Wernight
7对我没用。但是"caca"工具有效。使用"DejaVu Sans Mono-16",像素大小=16.67 文件=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf ioctl VT_GETSTATE: 对设备不适当的ioctl(不是Linux控制台?) - Felipe
3@Wernight 在Ubuntu下,按下Ctrl + Alt + F1/F2/F3可以进入tty界面(按下Ctrl + Alt + F8返回)。 - joelostblom
@FelipeMicaroniLalli 当我使用基于X的终端而不是tty时,我遇到了与你相同的错误。 - joelostblom
1还有一个名为FIM的软件,它是fbi的改进版本。主页上表示它不仅可以使用帧缓冲显示图像,还可以使用X显示。然而,对我来说无法安装。 - joelostblom
@cheflo 我的意思是它不仅适用于tty,也适用于终端。 - Wernight
1好消息!iTerm2 v3现在可以内嵌显示图片了。请查看https://www.iterm2.com/images.html。 - A B
@cheflo 在 Ubuntu 16.04 LTS 上返回的方法是(Ctrl + Alt + F7)。 - serup
我在想让FBI处理你的图片有多安全:/ - Iulian Onofrei
你绝对可以在终端窗口中显示图像。请查看:https://www.youtube.com/watch?v=0SasrQ7pnbA Sixelxterm支持。 - fjardon

另一个工具是catimg,可以通过安装来使用。
sudo apt-get install catimg

它实际上并不查看图像,而是将其转换为彩色字符。

enter image description here


另一个选择是术语:

enter image description here https://www.youtube.com/watch?feature=player_embedded&v=ibPziLRGvkg

你可以通过添加enlightenment-git软件源在Ubuntu上安装它。
sudo add-apt-repository ppa:enlightenment-git/ppa
sudo apt-get update && sudo apt-get install terminology

在最近的Ubuntu版本中(>=Vivid 15.04),可以从官方软件源获取。
sudo apt-get install terminology

要查看图像,请键入tycat IMAGENAME,要查看图像列表,请键入tyls -m

5使用tycat将图像内联显示,并使用tyls -m在目录中显示中等大小的缩略图。 - joelostblom
sudo add-apt-repository ppa:hannes-janetzek/enlightenment-svn 无效 - Gucho Ca
我已经更新了答案,指出了更近期的启示PPA。 - Javier López
1@chilicuil terminology 在官方的 Ubuntu 软件仓库中可找到(http://packages.ubuntu.com/wily/terminology),无需使用 PPA。 - cat
@cat 原始答案是在 Vivid 发布之前编写的,当时还没有相关术语可用。Enlightenment PPA 仍然提供 Precise/Trusty 的软件包和更新的术语版本。然而,也许编辑答案以指出最近的 Ubuntu 发行版中提供了冻结的术语版本会更有帮助。 - Javier López
我收到了ERR<3345>:情感通用....... _players_load()没有可用的通用播放器;当尝试tycat <image.png>时。 - serup
我猜没有办法通过SSH获得这个功能,对吗? - Sridhar Sarnobat

其实有一个名为TermKit的项目,如果你想测试一下的话,可以看看http://blog.easytech.com.ar/2011/05/21/playing-with-termkit-with-chrome/,但它还不够完善(因为你似乎是用Mac,所以你应该试试Mac版本,因为那是“原版”)。
所以,是的,这是一个值得探索的想法,然而-在图形和纯文本模式之间切换必须很快,因为我并不总是需要查看图片。另外-它需要与例如Vim完全兼容。

我之前在Slashdot上读到过这个项目。听起来很有趣!可惜需要使用Google Chrome才能使用...好吧,如果你一开始就用Chrome的话,也不算太糟糕,但这似乎是一个不必要的依赖。 - Knowledge Cube
@WarriorIng64 嗯,如果你在Qt的WebKit上稍微动手脚的话,它可能会起作用 - 但幸运的是,我们在软件仓库中有chromium-browser,所以安装类似Chrome的东西相当容易 - 我还没有真正尝试在我的电脑上使用TermKit(已安装Chromium,但主要使用Fx),因为我非常依赖Vim,而且不能使用一个不给我我心爱的文本编辑器的终端 ;) - sakjur

只是为了增加收藏(也许是为了将来的我),还有一个名为chafa的软件正在积极开发/维护中,它的工作方式类似于catimg。两者都可以显示图片和GIF动画。
# install chafa
sudo apt install chafa
# open a file
chafa file.gif

showcasing chafa

猫图:

# install catimg
sudo apt install catimg
# open a file
catimg filename.gif

Showcasing catimg


是的,chafa看起来很棒! - Flimm
Chafa在Ubuntu 22.04上的默认Ubuntu Gnome终端中对我非常好用。 - ahcox

我写了一个工具来实现这个功能。我给它取名为“在终端中显示图像”(siit)。它假设你有一个支持256色和UTF8的终端,并且是用Perl编写的。
我把它放在了我的~/bin目录下。它假设你已经安装了Image::Magick、Term::Size、Getopt::Long和Time:HiRes这些模块,这些模块应该都可以在你的发行版仓库或CPAN上找到。
我的初衷是通过ssh登录到我的家里,在不启动X显示的情况下快速查看图片。脚本会根据你所使用的终端自动调整图像的宽度和高度。我使用了UTF8字符来有效地增加终端的垂直分辨率,这对于提高清晰度非常有帮助。当然,效果因人而异。 这里有一些示例截图 这里是源代码

1是"siit",不是"shit"(真的....) - Star OS
最初它被称为termpeg,但这个名字太难记住了,而且在自动补全方面表现不佳。此外,“this code is a piece of siit”甚至没有意义。 - Tom
2源代码链接对我来说无法使用,但我在互联网上找到了一个版本,这是一个镜像:https://gist.github.com/certik/4336299de10f400ee49943bd9f8a8ba6 - Ondřej Čertík
有没有可能提供一个捆绑版本?每当我需要安装库时,我总是放弃。 - Sridhar Sarnobat