Czy istnieje program wiersza polecenia, który może konwertować obraz na obraz artystyczny ASCII?


19

Czy istnieje program wiersza polecenia (dla systemu Linux), który może konwertować obraz do postaci ascii, a następnie zapisywać go jako obraz, np. Jpg lub png?

Aby zilustrować to, czego potrzebuję, chcę przekonwertować poniższy obraz na sztukę ascii wprowadź opis zdjęcia tutaj

Dane wyjściowe, których oczekuję od programu, powinny być podobne do tego, który został utworzony przez zrzut ekranu z wyniku konwersji konwertera obrazu na ascii (wynik był czystym tekstem)

wprowadź opis zdjęcia tutaj

Wiem, że GIMP ma możliwość zapisania obrazu jako sztuki ascii, a aview może również przekonwertować obraz na ascii. Jednak tego pierwszego nie można wykonać za pomocą wiersza poleceń, a ten drugi pozwala tylko wyświetlić dane wyjściowe, a nie zapisać (nie chcę uciekać się do zrobienia zrzutu ekranu wyniku).

Wiem też, że libcaca może zapisać swoje wyjście na obrazie, ale wyświetla tylko kolorowe ascii, jak poniżej.

wprowadź opis zdjęcia tutaj

Wykonane przez konwersję obrazu źródłowego na skalę szarości, a następnie za pomocą następującego polecenia:

img2txt -W 70 -f tga input.jpg > output.tga

Powodem, dla którego potrzebny jest program wiersza polecenia, jest wsadowe przetworzenie folderu pełnego obrazów.


1
Nigdy tego nie próbowałem, ale wiem, że można przesyłać tekstem do convert(ImageMagick). Jeśli ustawisz wyjście -f img2txt na ansi (zamiast kolorowego ansi), możesz przesłać wynik do konwersji (lub innego odpowiedniego oprogramowania)
horatio

@horatio: konwersja wydaje się oczekiwać danych wejściowych pliku i odmawia odczytu z potoku. W każdym razie możemy to zrobić za pomocą pliku tymczasowego.
Takkat

Odpowiedzi:


7

Możesz użyć tego kodu Pythona, który stworzyłem, do tworzenia grafiki ascii ze zdjęć i filmów:

https://gist.github.com/lindylex/9374326

Przykładowe dane wyjściowe

Oryginalny wprowadź opis zdjęcia tutaj

Wyjście sztuki ASCII ( python ascii_movie_image_ver_1.py cat.jpg 4 10) wprowadź opis zdjęcia tutaj


2
linki przychodzą i odchodzą, nawet jeśli jest to Twoja strona ... czy możesz dodać dwa zrzuty ekranu „przed” i „po” za pomocą swojego kodu?
Ilan

4
@Ilan Dodałem przykład i wskazałem publiczne repozytorium git
hellocatfood

14

Jeśli wydaje się, że używasz Linuksa, możesz łatwo połączyć aplikacje, aby uzyskać pożądany rezultat. Można to również włączyć do skryptu przetwarzania wsadowego.

Poniższy przykład wykorzystuje jp2a , potężny konwerter JPG na ASCII-art z wieloma opcjami osiągnięcia pożądanych rezultatów (patrz strona podręcznika). Następnie przetwarzamy wynikowy plik tekstowy ASCII do obrazu za pomocą konwersji z pakietu ImageMagick . Ponownie istnieje wiele opcji dostrajania wyniku. Obie aplikacje będą prawdopodobnie dostępne z repozytoriów Twojej dystrybucji.

Poniższy przykładowy skrypt wygeneruje obraz ASCII-art (format w zależności od rozszerzenia, które dajemy, .jpgto JPEG) z wejściowego obrazu JPEG. Źródło jest renderowane do szerokości 160 znaków przy 6 pkt. To po prostu zmieści się na domyślnym rozmiarze strony, który został wcześniej zdefiniowany podczas konwersji.

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2

Jest to prawdopodobnie najbliższe mojej pożądanej wydajności. Dzięki!
hellocatfood

Czy istnieje sposób, aby określić szerokość, aby była czymś innym 835px? Chcę przekonwertować grafikę ascii na 1920x1080tapetę, ale gdy przejdę tę -resize 1920x1080opcję, szerokość pozostanie na 835px.

@awashburn: rozmiar obrazu zależy od numeru znaku (szerokości) i rozmiaru punktu. Powiększ punkt, aby uzyskać większy wynik lub skaluj uzyskany obraz w drugim przebiegu.
Takkat

1
Dla użytkowników MacOS: jp2a jest również dostępna za pośrednictwem homebrew i działa: brew install jp2a.
k0pernikus

1
Weź również pod uwagę bezpośrednie wyjście do HTML w niektórych przypadkach: jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Możesz określić preferowany zestaw znaków do renderowania (będziesz musiał unikać metaznaków, jeśli chcesz ich użyć). Dla jp2a patrz także AUR dla Arch .

2

W Node.js Knockout 2012 pojawiła się zwycięska propozycja, która pobrała wideo z kamery internetowej i wypluła „kanał ascii”:

Asciigram

Strona Asciigram

Asciigram to „narzędzie produktywności”, które pozwala tworzyć filmy i obrazy ASCII za pomocą kamery internetowej. Można również tworzyć obrazy ASCII, przeciągając obrazy na stronę. [Połączyć]

Nie jest to dokładnie wiersz poleceń, ale być może możesz go zmodyfikować do własnych potrzeb. Biblioteka, której używają do konwersji obrazu na ascii, nazywa się Jscii .


1
Wysyła tylko tekst, a nie obrazy. Ponadto nie jest to program wiersza poleceń
hellocatfood


1

Wygląda na to, że używasz Linuksa i już znasz libcaca. Istnieje inna biblioteka, która robi dokładnie to, co mówisz (zdjęcie do Ascii w wierszu poleceń): Aalib .

Jest wiele programów, które to robią. Ten działa zarówno w systemie Linux, jak i Windows . Nie korzysta z zewnętrznych bibliotek, pełnego kodu źródłowego itp.


O ile mi wiadomo, Aalib nie może zapisać swoich wyników bezpośrednio na obrazie - należałoby zastosować metodę polegającą na zrzutach ekranu, co nie byłoby wiarygodne w przypadku dużych obrazów. Jeśli istnieje sposób, aby to zrobić za pomocą Aalib, czy możesz zaktualizować swoją odpowiedź? Wspomniany program wygląda naprawdę dobrze. Czy wykonuje konwersję wsadową i czy istnieje interfejs wiersza polecenia?
hellocatfood

1

Tak długo, jak wiem, że program nie ma interfejsu wiersza polecenia, ale konwertuje obrazy na tekst, a następnie na obrazy. Źródło jest dostępne, więc możesz użyć go do napisania własnego narzędzia.

Masz rację, aalib nie wysyła obrazów, ale wysyła tekst. Jak również wiele innych programów, które działają w wierszu poleceń.

Jeśli używasz Linuksa, istnieje program wiersza poleceń o nazwie asciitopgm, który konwertuje tekst ascii na mapę bitową. Jest to część pakietu netpbm.

Możesz więc użyć kombinacji narzędzi:

  1. aalib, aby narysować obraz za pomocą tekstu
  2. asciitopgm, aby utworzyć bitmapę pgm z pliku tekstowego.
  3. (opcjonalnie) Użyj konwersji (z pakietu Imagemagick), aby przekonwertować pgm na dowolny inny format rastrowy.

Myślę, że możesz zrobić to, co chciałeś w ten sposób.


0

Tak, istnieje narzędzie o nazwie jp2a które zasadniczo konwertuje obraz jpg do sztuki ascii.

Na przykład:

$ jp2a skull.jpg

Oryginalny Skull.jpg

wprowadź opis zdjęcia tutaj

Wyjście Ascii Art

wprowadź opis zdjęcia tutaj

Pamiętaj, aby użyć obrazu jpg. Jeśli twój obraz ma inny format, możesz go zmienić

$ convert skull.png skull.jpg

1
Witaj w GDSE! To wydaje się duplikatem odpowiedzi. Możesz go ulepszyć, edytując go, bo w końcu może zostać usunięty.
ciekawy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.