Comment faire en sorte que mon terminal affiche des images graphiques?

146

Ceci est une rapide maquette que je copie et colle ensemble. J'imagine que c'est super cool et utile.

Est-ce que quelque chose comme ça existe déjà?

http://imgur.com/Z3DbS

Dennkster
la source
5
Je viens juste d'utiliser feh! Je sais que ce n'est pas dans le terminal, mais ça fait son travail.
dylnmc
Terminal n'est pas pour les graphiques, il ne peut afficher que des caractères Unicode et faire de la coloration. Le meilleur que vous puissiez obtenir est l'art ASCII.
Ben
J'aime utiliser le terminal pour les graphiques avec itermplot , qui est malheureusement uniquement sous MacOS.
Miku
Cette question est-elle motivée par la petite image de bière dans Homebrew? C'est un emoji.
Ekevoo
Si vous êtes sur un serveur Ubuntu et que vous essayez de les visualiser sur un Mac, cela fonctionne à merveille: unix.stackexchange.com/a/457076/7000
Sridhar Sarnobat

Réponses:

48

Mise à jour 2018-12-31

Le formidable émulateur de terminal polyvalent a une icatcommande pour afficher des images (ne fonctionne pas dans tmux). Kitty active également les prévisualisations d’images dans ranger (un gestionnaire de fichiers terminal), méthode que j’utilise le plus souvent (fonctionne dans tmux).


1. w3m

Bien que l'objectif principal w3msoit de fournir une navigation Web dans la console, il peut également être utilisé pour afficher des images dans un terminal. Les packages appropriés à installer sont w3met w3m-img(sur Ubuntu au moins). Vous devez ensuite désactiver la visionneuse d'images externe en passant -o ext_image_viewer=0ou en allant dans le menu d'options («o») w3met désactiver la visualisation d'images externes.

Maintenant, en tapant w3m <image_name>affichera l'image dans le terminal. w3mutilisera l'intégralité de la fenêtre du terminal, vous ne pourrez donc pas voir vos commandes précédentes avant de quitter w3m(pensez less, non cat). Notez que si l'image est trop grande pour s'adapter à la fenêtre du terminal, elle sera toujours ouverte de l'extérieur (dans imagemagick pour moi). Notez également que même si je lis plusieurs endroits pour lesquels w3mdes images en ligne ne fonctionneraient pas gnome-terminal, cela fonctionne bien pour moi. Il est un peu gênant de devoir taper qdeux fois pour fermer l’image en premier, puis w3m.

2. Terminologie

tycatfait partie de terminologyet affiche des images telles que des catfichiers texte et des imgcattravaux similaires pour iTerm2 sous OS X.

3. libsixel + mlterm / xterm

Installez libsixel-bintous les terminaux compatibles (les exemples sont mentionnés dans la section «Conditions requises» de ce fichier Lisez-moi , par exemple, mltermou xtermcompilés avec les drapeaux appropriés et vous pourrez voir les images avec la img2sixelcommande. Ces deux packages sont disponibles dans le dépôt Ubuntu.

4. FIM

Ensuite, il y a FIM qui est une version améliorée de fbi. La page d'accueil indique qu'elle peut afficher des images non seulement avec le framebuffer, mais également avec X. Cependant, elle ne s'installera pas pour moi. Edit je l’ai lancé en téléchargeant la version de la tronc 0.5, ./configure --disable-exifpuis en supprimant temporairement anaconda(distribution python) de mon chemin car cela entraînait un conflit avec libpngavant d’exécuter makeet sudo checkinstall(vous devez écrire manuellement un numéro de version avec checkinstall, mais cela facilite les choses. enlever que make install). Cependant, les images sont toujours affichées dans une fenêtre séparée, bien que fbivous ne deviez pas utiliser X, ce qui est plutôt cool.

5. jupyter-qtconsole

Vous pouvez également faire preuve de créativité et utiliser jupyter-qtconsole comme console système, le configurer pour afficher les tracés en ligne ( %matplotlib inline), puis afficher l'image à l'aide de matplotlib =)

6. feh

fehutilise X pour afficher des images, mais les affiche feh -xdans une fenêtre sans bordure pouvant être rapidement fermée avec qou x. Bien que les images ne soient pas affichées dans le terminal proprement dit, j’ai pensé que cela valait la peine d’être mentionné car c’est le moyen le moins intrusif que j’ai trouvé jusqu’à présent et ce que j’utilise jusqu’à gnome-terminalobtention d’un imgcat/ tycatéquivalent.

joelostblom
la source
w3m utilise caca-utils, il serait donc préférable de l'utiliser directement (cacaview e.jpg)
user1133275
65

Peut-être que le caca est ce que vous voulez. Pour les images :

sudo apt-get install caca-utils
cacaview /PATH/TO/image.jpg

Assurez-vous que la fenêtre de votre terminal est suffisamment grande.

Par exemple, voici comment cette image est affichée dans cacaview:

Capture d'écran

Je l’utilisais parfois pour le plaisir de regarder des vidéos au format ASCII dans mplayer :)

mplayer -vo caca /PATH/TO/video.mpg
utilisateur569825
la source
6
Très utile - une commande de caca-utils qui devrait afficher des images en ligne dans le terminal estimg2txt
Wilf
7
Il y a maintenant un nouveau joueur sur le terrain: github.com/ichinaski/pxl --- Dans un test rapide, les images ont un meilleur rendu que dans cacaview. (Je voulais ajouter une nouvelle réponse, mais le site ne m'a pas laissé (?))
user569825
" regarder des vidéos en ASCII " Mais ... pourquoi?
Derek mardi
4
"watch videos as ASCII" But... why? parce que tu veux parce que vous devez regarder la vidéo et que la seule chose que vous avez est un terminal? Parce que si vous n’avez pas besoin de quelque chose, cela ne signifie PAS que les autres suivent.
Marcin Orlowski
1
mpva une sortie tct qui (lorsqu'elle est utilisée avec --quiet) affiche des supports dans le terminal avec une qualité comparable à pxl.
dsstorefile1
38

J'ai écrit un petit outil C ++ pour convertir les images en codes de contrôle ANSI RGB et en caractères Unicode Block pour les terminaux modernes prenant en charge ces fonctionnalités:  https://github.com/stefanhaustein/TerminalImageViewer

Installation:

git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make
sudo make install

Usage:

tiv <image(s)>

Edit : Modification des liens / instructions vers le référentiel principal; utilisation ajoutée.

Exemples:

TerminalImageViewer

Stefan Haustein
la source
2
Cela a l'air très sympa! Mais est-ce Java ou C ++?
Andrea Lazzarotto
3
C'était autrefois Java, mais le besoin d'une JVM pour cette tâche simple m'a irrité, je l'ai donc porté en C ++ (les captures d'écran montrent toujours la commande java cependant)
Stefan Haustein le
4
Bien mieux que cacaview!
Piotr Dabkowski
1
C'est un outil incroyable. Certainement plus lent, mais bien meilleur que le caca. Existe-t-il une perte de qualité lors de l'utilisation du "mode 256 bits"? (depuis que je suis obligé, le mode normal est foiré)
phil294
2
Très bons résultats! Merci ! Très utile avec ssh quand aucun serveur x n'est disponible!
Arnaud De Broissia
33

J'ai créé une fonction de shell très simple et rapide, à une seule ligne, qui résout la question initiale exactement comme demandé dans les maquettes. Notez que les captures d'écran ci-dessous sont des images réelles et non des maquettes.

function lsix() { montage -tile 7x1 -label %f -background black -fill white "$@" gif:- | convert - -colors 16 sixel:-; }

Capture d'écran de l'utilisation de la commande lsix

Les conditions préalables sont minimales: xterm et ImageMagick ( apt-get install xterm imagemagick). Votre xterm doit être en mode vt340, que vous pouvez définir dans ~/.Xresourcesou à partir de la ligne de commande ( xterm -ti vt340).

Limitations: Seules 16 couleurs sont utilisées sur toutes les images présentées. Cela signifie qu'une image peut sembler meilleure lorsqu'elle est vue seule. (Voir ci-dessous).

Capture d'écran montrant une limitation de 16 couleurs

MISE À JOUR

Bien que ma réponse ci-dessus soit toujours correcte, j'ai créé un script shell encore plus performant, capable de créer une "ls" d'images directement dans un terminal. J'ai ajouté toutes sortes d'améliorations pour rendre les images plus belles (plus de couleurs, alpha correct, orientation JPEG, traitement de nombreuses images, disposition compacte des tuiles, ...). C'est encore un programme assez petit, mais j'ai pensé que les gens pourraient vouloir le personnaliser, je l'ai donc mis sur github: https://github.com/hackerb9/lsix .

hackerb9
la source
30

Vous ne pouvez pas le faire dans une fenêtre de terminal, mais vous pouvez le faire dans une console Linux avec fbi. Vous avez besoin d'un framebuffer pour que cela fonctionne:

sudo apt-get install fbi

Accédez à une console Linux (à l'aide de Ctrl+ Alt+ F1) et entrezfbi <filename>

Cela devrait montrer votre image.

Amith KK
la source
5
Qu'entendez-vous par "terminal" vs "tty"? Ne sont-ils pas la même chose? askubuntu.com/questions/506510/…
Wernight
6
Ca n'a pas marché pour moi. Mais l'outil "caca" a fonctionné. using "DejaVu Sans Mono-16", pixelsize = 16.67 fichier = / usr / share / fonts / truetype / dejavu / DejaVuSansMono.ttf VT_GETSTATE: Fichier inapproprié pour périphérique (pas une console linux?)
Felipe
3
@Wernight Ctrl + Alt + F1 / F2 / F3 vous donne un tty sous ubuntu (Ctrl + Alt + F8 pour revenir en arrière).
joelostblom
1
Il y a aussi FIM qui est une version améliorée de fbi. La page d'accueil indique qu'elle peut afficher des images non seulement avec le framebuffer, mais également avec X. Cependant, elle ne s'installera pas pour moi.
joelostblom
1
ITerm2 v3 peut afficher les images en ligne, vérifiez iterm2.com/images.html
AB
20

Une autre alternative est la terminologie:

entrez la description de l'image ici https://www.youtube.com/watch?feature=player_embedded&v=ibPziLRGvkg

Vous pouvez l'installer sur Ubuntu en ajoutant le référentiel enlightenment-git :

sudo add-apt-repository ppa:enlightenment-git/ppa
sudo apt-get update && sudo apt-get install terminology

Ou, dans les versions récentes d'Ubuntu>> Vivid (15.04), il peut être récupéré à partir des référentiels officiels.

sudo apt-get install terminology

Pour afficher une image, tapez tycat IMAGENAMEet pour afficher une liste d'images, tapez tyls -m.

Javier López
la source
5
tycatpour afficher une image en ligne et tyls -mpour afficher des vignettes de taille moyenne dans un répertoire.
joelostblom
ajouter un fichier au répertoire ppa: hannes-janetzek / enlightenment-svn ne fonctionne pas
Gucho Ca
J'ai mis à jour la réponse pour indiquer au ppa des Lumières plus récent
Javier López le
1
@chilicuil terminologyest dans les dépôts officiels d'Ubuntu , aucun PPA requis.
chat
@cat la réponse originale a été écrite avant la publication de vivid et à ce moment-là, la terminologie n'était pas disponible, le PPA d'illumination possède toujours des packages précis / fiables et des versions de terminologie plus récentes. Cependant, il sera peut-être utile de modifier la réponse pour indiquer que des versions terminologiques figées sont disponibles dans les dernières versions d'ubuntu.
Javier López
12

Il y a en fait un tel projet nommé TermKit , si vous souhaitez le tester - consultez http://blog.easytech.com.ar/2011/05/21/playing-with-termkit-with-chrome/ mais c'est tout à fait Inachevé (puisque vous semblez avoir un Mac, vous devriez essayer la version Mac car c'est "l'original")

Alors oui, c’est une idée qui mérite d’être explorée - le passage du mode graphique au texte seulement doit être rapide car je n’ai pas toujours besoin des images visionnées. En outre, il doit être entièrement compatible avec Vim, par exemple.

Sakjur
la source
J'ai déjà entendu parler de ce projet une fois auparavant sur Slashdot . Cela semble intriguant! Dommage que vous ayez besoin de Google Chrome pour l'utiliser ... Bon, d'accord, ce n'est pas si mal si vous utilisez Chrome pour commencer, mais cela semble être une dépendance inutile.
Christopher Kyle Horton
@ WarriorIng64 Ouais, ça pourrait marcher si on piratait un peu WebKit de Qt - mais heureusement, nous avons le chromium-browserdans le dépôt, il est donc facile d'installer quelque chose de Chromelike - je n'ai pas vraiment essayé TermKit sur mon ordinateur (avec Chromium installé, mais en utilisant Fx comme principal) puisque je suis assez dépendant de Vim et que je ne peux pas vraiment utiliser un terminal qui ne me donnera pas mon éditeur de texte bien-aimé;)
sakjur
8

Cela n'existe pas; gnome-terminalest seulement capable d'afficher du texte, du moins autant que je sache.

Toutefois, vous pouvez appeler une visionneuse d'images à partir de la ligne de commande pour afficher vos images dans un dossier particulier. Donc, pour sortir de votre maquette ci-dessus et vous montrer la liste de toutes les images .jpg du dossier actuel, vous pouvez utiliser Eye of GNOME (visionneuse d'images par défaut d'Ubuntu) depuis la ligne de commande pour quelque chose de similaire:

eog *.jpg &

Notez que la fenêtre qui s’affiche n’affiche qu’une image à la fois, bien que vous puissiez utiliser les boutons fléchés fournis pour les parcourir.

Christopher Kyle Horton
la source
1
Si vous utilisez un terminal, eog *.jpg & disownmieux vaut sinon, l'EOG se fermera probablement à la fermeture du terminal. NB Je souhaite que EOG soit toujours la visionneuse d'images par défaut d'Ubuntu - shotwell est bon, mais essaie d'indexer mes 30 Go + d'images ... et est lent et ennuyant de toute façon
Wilf
Toutes les réponses précédentes prouvent ce post faux.
Arnaud De Broissia
7

J'ai écrit un outil pour le faire. J'ai nommé mine Show Image In Terminal ( siit). Cela suppose que vous ayez un terminal 256 couleurs et un support UTF8, et que cela est écrit en Perl.

Je l'ai laissé tomber dans mon ~/bin. Cela suppose que vous avez Image :: Magick, Terme :: Taille, Getopt :: Long et Time: HiRes, qui devraient tous être disponibles dans les dépôts de votre distribution, ou CPAN.

Mon intention était de rentrer chez moi et de visualiser rapidement les images sans lancer d'affichage sur X. Le script s'adapte à la largeur / hauteur appropriée pour le terminal où vous vous trouvez. J'ai utilisé les caractères UTF8 pour doubler efficacement la résolution verticale de votre terminal. aide à la clarté. YMMV.

Échantillons de coups ici

Code source ici

À M
la source
1
C'est "siit", pas "merde" (sérieusement ....)
Star OS
Il s’appelait à l’origine Termpeg, mais c’est trop difficile à retenir et il n’est pas très complet. En outre, "ce code est un morceau de code" n'a même pas de sens.
Tom
2
Le lien de code source ne fonctionne pas pour moi, mais je l' ai trouvé une version sur Internet, est un miroir ici: gist.github.com/certik/4336299de10f400ee49943bd9f8a8ba6
Ondřej Čertík
Avez-vous une chance de fournir une version groupée? J'abandonne toujours lorsque je dois installer des bibliothèques.
Sridhar Sarnobat le
6

En plus de la réponse de Joel , le gestionnaire de fichiers de terminal Ranger avec w3mimgdisplayextension peut afficher des images en couleur et prend également en charge les "prévisualisations d'art ASCII à l'ancienne". Voici comment vous pouvez l'activer. Ce n'est peut-être pas exactement ce que vous cherchiez, mais un moyen de prévisualiser des images dans un terminal.

entrez la description de l'image ici

afedersin
la source
4

Un autre outil est catimg , bien qu’il n’existe aucun paquet prêt pour Ubuntu. En réalité, il ne visualise pas l'image mais la transforme en caractères colorés.

entrez la description de l'image ici

un utilisateur
la source
3

Voici quelques solutions dans node.js(Instructions d'installation ici ).

  1. tube à image

  2. imagerie

Pour installer l'un ou l'autre, tapez npm install -g <package_name>package_nameest l'un picture-tubeou l'autre imaging.

Nemo
la source