Como faço para o meu terminal exibir imagens gráficas?

146

Esta é uma rápida maquete que eu copio e colo. Eu imagino que isso seja super legal e útil.

Já existe algo assim?

http://imgur.com/Z3DbS

Dennkster
fonte
5
Eu sempre uso feh! Sei que não está no terminal, mas funciona.
dylnmc
O terminal não é para gráficos, ele pode exibir apenas caracteres unicode e fazer algumas cores. O melhor que você pode obter é arte ASCII.
Ben
Adoro usar o terminal para gráficos com itermplot , que infelizmente é apenas o macOS.
Miku
Esta pergunta é motivada pela pequena imagem de cerveja no Homebrew? Isso é um emoji.
Ekevoo
Se você estiver em um servidor Ubuntu tentando visualizá-los em um Mac, isso funcionará perfeitamente: unix.stackexchange.com/a/457076/7000
Sridhar Sarnobat

Respostas:

48

Atualização 2018-12-31

O excelente kit emulador de terminal tem um icatcomando para exibir imagens (não funciona no tmux). Kitty também permite visualizações de imagens no ranger (um gerenciador de arquivos do terminal), que é o método que eu mais uso atualmente (funciona no tmux).


1. w3m

Embora o objetivo principal w3mseja fornecer navegação na web no console, ele também pode ser usado para visualizar imagens no terminal. Os pacotes relevantes a serem instalados são w3me w3m-img(pelo menos no Ubuntu). Você precisará desativar o visualizador de imagens externo passando -o ext_image_viewer=0ou acessando o menu de opções ('o') dentro w3me desativando a visualização de imagens externas.

Agora, a digitação w3m <image_name>exibirá a imagem no terminal. w3musará toda a janela do terminal; portanto, você não poderá ver seus comandos anteriores até sair w3m(pense less, não cat). Observe que, se a imagem for grande demais para caber na janela do terminal, ela ainda será aberta externamente (na imagem para mim). Observe também que, embora eu tenha lido vários locais para os quais as w3mimagens embutidas não funcionariam gnome-terminal, está funcionando bem para mim. É um pouco chato que você precise digitar qduas vezes para fechar primeiro a imagem e depois w3m.

2. Terminologia

tycatfaz parte terminologye exibe imagens como catexibe arquivos de texto e imgcatfunciona para o iTerm2 no OS X.

3. libsixel + mlterm / xterm

Instale libsixel-bine qualquer terminal compatível (exemplos mencionados em 'Requisitos' deste leia-me , por exemplo, mltermou xtermcompilados com os sinalizadores corretos e você pode visualizar imagens com o img2sixelcomando. Ambos os pacotes estão disponíveis nos repositórios do Ubuntu.

4. FIM

Depois, há o FIM, que é uma versão aprimorada do fbi. A página inicial declara que ele pode exibir imagens não apenas com o framebuffer, mas também com o X. No entanto, ele não será instalado para mim. Editar Eu consegui rodar baixando a versão do tronco 0.5, executando ./configure --disable-exife removendo temporariamente anaconda(distribuição python) do meu caminho, pois causava um conflito libpngantes da execução makee sudo checkinstall(você precisa escrever manualmente um número de versão checkinstall, mas facilita para remover que make install). No entanto, as imagens ainda são exibidas em uma janela separada, embora, como fbivocê, não precise executar o X, o que é bem legal.

5. jupyter-qtconsole

Você também pode ser criativo e usar o jupyter-qtconsole como console do sistema, configurá-lo para mostrar plotagens inline ( %matplotlib inline) e exibir a imagem usando matplotlib =)

6. feh

fehestá usando o X para exibir imagens, mas as exibe feh -xem uma janela sem borda que pode ser rapidamente fechada com qou x. Embora as imagens não sejam exibidas no terminal, por exemplo, achei que valeria a pena mencionar, pois é a maneira menos invasiva que encontrei até agora e o que estou usando até gnome-terminalobter um imgcat/ tycatequivalente.

joelostblom
fonte
w3m está usando caca-utils por isso seria melhor apenas usá-lo diretamente (cacaview E.jpg)
user1133275
65

Talvez caca seja o que você quer. Para imagens :

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

Verifique se a janela do terminal é grande o suficiente.

Por exemplo, veja como esta imagem é exibida em cacaview:

Captura de tela

Às vezes eu costumava usá-lo por diversão para assistir vídeos como ASCII no mplayer :)

mplayer -vo caca /PATH/TO/video.mpg
user569825
fonte
6
Muito útil - um comando de caca-utils que deve exibir imagens em linha no terminal éimg2txt
Wilf
7
Agora há um novo jogador em campo: github.com/ichinaski/pxl --- Em um teste rápido, as imagens ficam melhores do que em cacaview. (Eu queria adicionar uma nova resposta, mas o site não me deixou ()?)
user569825
" assista a vídeos como ASCII " Mas ... por quê?
Derek # 21/07
4
"watch videos as ASCII" But... why? porque você quer? porque você precisa espiar o vídeo e a única coisa que você tem é terminal? Porque se você não precisa de algo, isso NÃO significa que outros o sigam.
Marcin Orlowski
1
mpvpossui uma saída tct que (quando usada com --quiet) exibe mídia no terminal com qualidade comparável a pxl.
precisa saber é o seguinte
38

Eu escrevi uma pequena ferramenta C ++ para converter imagens em códigos de controle ANSI RGB e caracteres gráficos de bloco Unicode para terminais modernos com suporte para esses recursos:  https://github.com/stefanhaustein/TerminalImageViewer

Instalação:

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

Uso:

tiv <image(s)>

Editar : Links / instruções alterados para o repositório principal; uso adicionado.

Exemplos:

TerminalImageViewer

Stefan Haustein
fonte
2
Isso parece muito bom! Mas é Java ou C ++?
Andrea Lazzarotto
3
Ela costumava ser Java, mas a necessidade de um JVM para esta tarefa simples me incomodou, então eu tenho portado para C ++ (as capturas de tela mostram ainda o comando java embora)
Stefan Haustein
4
Muito melhor do que cacaview!
Piotr Dabkowski 5/17/17
1
Esta é uma ferramenta incrível. Definitivamente mais lento, mas muito melhor que o caca. Existe alguma perda de qualidade ao usar o "modo de 256 bits"? (desde que eu tenho para, modo normal é confuso)
phil294
2
Resultados muito bons! Obrigado ! Muito útil com ssh quando nenhum servidor x está disponível!
Arnaud De Broissia
33

Eu criei uma função de shell de uma linha muito rápida e simples, que resolve a pergunta original exatamente conforme solicitado nas maquetes. Observe que as capturas de tela abaixo são imagens reais, não maquetes.

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

Captura de tela do uso do comando lsix

Os pré-requisitos são mínimos: xterm e ImageMagick ( apt-get install xterm imagemagick). Seu xterm deve estar no modo vt340, que você pode definir na ~/.Xresourceslinha de comando ( xterm -ti vt340) ou a partir dela .

Limitações: Apenas 16 cores são usadas em todas as imagens mostradas. Isso significa que uma imagem pode parecer melhor quando vista sozinha. (Ver abaixo).

Captura de tela mostrando 16 limitações de cores

ATUALIZAR

Enquanto minha resposta acima ainda está correta, eu criei um script de shell ainda melhor que é capaz de fazer um 'ls' de imagens diretamente em um terminal. Eu adicionei todo o tipo de aprimoramentos para melhorar a aparência das imagens (mais cores, alfa adequado, orientação JPEG, manipulação de muitas imagens, layout compacto de blocos, ...). Ainda é um programa relativamente pequeno, mas achei que as pessoas poderiam querer personalizá-lo, então o coloquei no github: https://github.com/hackerb9/lsix .

hackerb9
fonte
30

Você não pode fazer isso em uma janela de terminal, mas em um console Linux usando fbi. Você precisa de um buffer de estrutura para permitir que isso funcione:

sudo apt-get install fbi

Vá para um console Linux (usando Ctrl+ Alt+ F1) e digitefbi <filename>

Deve mostrar sua imagem.

Amith KK
fonte
5
O que você quer dizer com "terminal" vs "tty"? Eles não são a mesma coisa? askubuntu.com/questions/506510/…
Wernight
6
Não funcionou para mim. Mas a ferramenta "caca" funcionou. usando "DejaVu Sans Mono-16", tamanho em pixels = 16,67 arquivo = / usr / share / fonts / truetype / dejavu / DejaVuSansMono.ttf ioctl VT_GETSTATE: ioctl inadequado para dispositivo (não é um console Linux?)
Felipe
3
@Wernight Ctrl + Alt + F1 / F2 / F3 fornece um tty no ubuntu (Ctrl + Alt + F8 para voltar).
Joelostblom
1
Há também o FIM, que é uma versão aprimorada do fbi. A página inicial declara que ele pode exibir imagens não apenas com o framebuffer, mas também com o X. No entanto, ele não será instalado para mim.
Joelostblom
1
Boas notícias O iTerm2 v3 pode mostrar imagens em linha verifique iterm2.com/images.html
AB
20

Outra alternativa é a terminologia:

insira a descrição da imagem aqui https://www.youtube.com/watch?feature=player_embedded&v=ibPziLRGvkg

Você pode instalá-lo no Ubuntu adicionando o repositório enlightenment-git :

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

Ou em versões recentes do Ubuntu> = Vivid (15.04), ele pode ser obtido nos repositórios oficiais.

sudo apt-get install terminology

Para visualizar uma imagem, digite tycat IMAGENAMEe para ver uma lista de imagens, digite tyls -m.

Javier López
fonte
5
tycatpara exibir uma imagem em linha e tyls -mpara exibir miniaturas de tamanho médio em um diretório.
Joelostblom 14/11/2015
sudo add-apt-repository ppa: hannes-janetzek / esclarecimento-svn não funciona
Gucho Ca
Atualizei a resposta para indicar o ppa de iluminação mais recente
Javier López
1
@chilicuil terminologyestá nos repositórios oficiais do Ubuntu , sem necessidade de PPA.
cat
@cat, a resposta original foi escrita antes do lançamento do vívido e, na época, a terminologia não estava disponível, o ppa de iluminação ainda tinha pacotes precisos / confiáveis ​​e versões de terminologia mais atualizadas. No entanto, talvez seja útil editar a resposta para indicar que versões de terminologia congeladas estão disponíveis em versões recentes do ubuntu.
Javier López
12

Na verdade, existe um projeto chamado TermKit , se você quiser testá-lo - confira http://blog.easytech.com.ar/2011/05/21/playing-with-termkit-with-chrome/, mas é bastante inacabado (como você parece ter um Mac, tente a versão para Mac, já que é "o original")

Portanto, sim, é uma ideia que vale a pena explorar - a alternância entre o modo gráfico e somente texto deve ser rápida, pois nem sempre preciso das imagens visualizadas. Além disso - ele precisa ser totalmente compatível com, por exemplo, o Vim ..

sakjur
fonte
Eu li sobre esse projeto uma vez antes no Slashdot . Parece intrigante! Pena que você precisa do Google Chrome para usá-lo ... bem, tudo bem, não é tão ruim se você usa o Chrome, mas parece uma dependência desnecessária.
Christopher Kyle Horton
@ WarriorIng64 Sim, eu poderia funcionar se você invadir um pouco o WebKit da Qt - mas felizmente temos os chromium-browserrepositórios -, para que seja muito fácil instalar algo como o Chromelike - eu realmente não tentei o TermKit no meu computador (com o Chromium instalado, mas usando Fx como principal) desde que eu sou muito dependente Vim, e não pode realmente usar um terminal que não vai me dar o meu editor de texto amado;)
sakjur
8

Isso não existe; gnome-terminalsó é capaz de exibir texto, pelo menos até onde eu sei.

No entanto, você pode chamar um visualizador de imagens na linha de comando para ver suas fotos em uma pasta específica. Portanto, saindo da maquete acima, mostrando a lista de todas as imagens .jpg na pasta atual, você pode usar o Eye of GNOME (visualizador de imagens padrão do Ubuntu) na linha de comando para algo semelhante:

eog *.jpg &

Observe que a janela exibida mostrará apenas uma imagem de cada vez, embora você possa usar os botões de seta fornecidos para alternar entre eles.

Christopher Kyle Horton
fonte
1
se estiver executando a partir de um terminal, eog *.jpg & disowné melhor; caso contrário, o EOG provavelmente sairá quando o terminal fechar. NB Desejo EOG ainda estava visualizador de imagens defualt do Ubuntu - shotwell é bom, mas tenta indexar meu 30GB + de fotos .... e é lento e chato de qualquer maneira
Wilf
Todas as respostas anteriores provam que este post está errado.
Arnaud De Broissia
7

Eu escrevi uma ferramenta para fazer isso. Eu nomeei o meu Show Image In Terminal ( siit). Pressupõe que você tenha um terminal de 256 cores e suporte UTF8, e está escrito em perl.

Eu deixei cair no meu ~/bin. Pressupõe que você tenha Image :: Magick, Term :: Size, Getopt :: Long e Time: HiRes, que devem estar disponíveis nos repositórios da sua distribuição, ou CPAN.

Minha intenção era entrar na minha casa e ver rapidamente as imagens sem abrir uma tela sobre X. As escalas de script são apropriadas para a largura / altura do terminal em que você está. Usei caracteres UTF8 para dobrar efetivamente a resolução vertical do seu terminal, o que realmente ajuda a clareza. YMMV.

Amostra de fotos aqui

Código fonte aqui

Tom
fonte
1
É "SIIT", não "shit" (a sério ....)
Estrela OS
Foi originalmente chamado de termpeg, mas isso é muito difícil de lembrar e não foi bem concluído. Além disso, "este código é um pedaço de siit" nem faz sentido.
Tom
2
O link para o código-fonte não funciona para mim, mas eu achei uma versão na internet, aqui é um espelho: gist.github.com/certik/4336299de10f400ee49943bd9f8a8ba6
Ondřej Čertík
Alguma chance de você fornecer uma versão em pacote? Eu sempre desisto quando tenho que instalar bibliotecas.
Sridhar Sarnobat 03/09
6

Além da resposta de Joel , o gerenciador de arquivos do terminal Ranger com w3mimgdisplayextensão pode mostrar imagens em cores e também suporta "antevisões de arte ASCII da velha escola". Aqui está como você pode habilitá-lo. Pode não ser exatamente o que você estava procurando, mas uma maneira de visualizar imagens no terminal.

insira a descrição da imagem aqui

afedersin
fonte
4

Outra ferramenta é o catimg , embora não haja um pacote pronto para o Ubuntu. Na verdade, ele não visualiza a imagem, mas a transforma em caracteres coloridos.

insira a descrição da imagem aqui

algum usuário
fonte
3

Aqui estão algumas soluções em node.js(Instruções de instalação aqui ).

  1. tubo de imagem

  2. imagem

Para instalar um, digite npm install -g <package_name>where package_nameé um de picture-tubeou imaging.

Nemo
fonte