Jeśli mam zwykły plik tekstowy, jak mogę przekonwertować go na plik obrazu za pomocą wiersza polecenia? (i zachowaj w nim układ grafiki ASCII)
cattego i zrobić zrzut ekranu?
clear && cat file. Ale tak, to brzydkie.
Jeśli mam zwykły plik tekstowy, jak mogę przekonwertować go na plik obrazu za pomocą wiersza polecenia? (i zachowaj w nim układ grafiki ASCII)
cattego i zrobić zrzut ekranu?
clear && cat file. Ale tak, to brzydkie.
Odpowiedzi:
Możesz do tego użyć openoffice (libreoffice).
soffice --convert-to jpg "Textfile.doc"
działa również z plikami tekstowymi.
--helpwyjściowych nie ma wzmianki ani nawet podpowiedzi .) Zmarszczki tylko, jeśli tekst jest dłuższy niż strona, wygląda na to, że dostaniesz tylko pierwszą stronę. (Jeśli istnieje sposób, aby kazać mu wyświetlać inne strony lub wiele plików, nie jest to dla mnie od razu oczywiste. Przekazywanie --outdirnie robi różnicy.) Ale w przypadku krótkich fragmentów tekstu DZIAŁA WYJĄTKOWO dobrze, a nawet automatycznie zawija. Ładny!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
imagemagickjest tu twój przyjaciel. Może ci pomóc coś podobnego do: -
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
gdzie ascii.txtjest twój plik ascii-art: -
text 15,15 " .88888888:.
88888888.88888.
.8888888888888888.
888888888888888888
88' _`88'_ `88888
88 88 88 88 88888
88_88_::_88_:88888
88:::,::,:::::8888
88`:::::::::'`8888
.88 `::::' 8:88.
8888 `8:888.
.8888' `888888.
.8888:.. .::. ...:'8888888:.
.8888.' :' `'::`88:88888
.8888 ' `.888:8888.
888:8 . 888:88888
.888:88 .: 888:88888:
8888888. :: 88:888888
`.::.888. :: .88888888
.::::::.888. :: :::`8888'.:.
::::::::::.888 ' .::::::::::::
::::::::::::.8 ' .:8::::::::::::.
.::::::::::::::. .:888:::::::::::::
:::::::::::::::88:.__..:88888:::::::::::'
`'.:::::::::::88888888888.88:::::::::'
`':::_:' -- '' -'-' `':_::::'`
"
z text 15,15dodanym jako pierwszy wiersz tekstu (15,15 to przesunięcie pozycyjne). Upewnij się również, że tekst do przekonwertowania jest ujęty w cudzysłów. Zrobią to pojedyncze lub podwójne cudzysłowy, ale upewnij się, że nie są one używane jako część twojej ascii-artu, ponieważ spowoduje to zamieszanie.
Wybrana czcionka powinna być czcionką o stałej szerokości, w przeciwnym razie tekst nie zostanie wyrównany.
Daje to:

-listopcji. Na przykład convert -list fontpokaże ci wszystkie możliwe argumenty -font.
sudo yum install ImageMagick.
sudo dnf install ImageMagick, a w większości popularnych dystrybucji Linuksa będzie to sudo apt-get install ...polecenie. Niezależnie od tego powyższe informacje rzeczywiście zakładają, że ImageMagick jest zainstalowany w danym systemie.
Uważam, że -annotateoperator ImageMagick jest nieco wygodniejszy niż -drawsugerowała metoda garethTheRed, z tego prostego powodu, że nie wymaga on modyfikacji pliku wejściowego. Nie jest tak potężny jak -draw, ale do hurtowego zrzucania zawartości pliku tekstowego do obrazu służy dobrze.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
wyświetli renderowaną wersję podanej zawartości pliku, ale bez konieczności modyfikowania pliku „ascii.txt” tak, aby zawierał text 15x15część operacji -drawpodstawowej.
Argumentem -fontmoże być dowolna obsługiwana nazwa czcionki, jeśli FreeMono nie jest dostępne (lub po prostu nie jest pożądane). Listę czcionek dostępnych dla dowolnego polecenia ImageMagick można uzyskać za pomocą -listoperatora, więc convert -list fontwyświetli wszystkie możliwe argumenty -font.
Argumenty -annotate(jak daleko przesunąć renderowany tekst od krawędzi obszaru roboczego) składają się z poziomych i pionowych przesunięć pikseli (odpowiednio). Pierwsze przesunięcie (przesunięcie x w poziomie) może być dowolną liczbą całkowitą dodatnią, ale nie musi być większe niż kilka pikseli. Drugie przesunięcie (przesunięcie pionowe w pionie) musi być co najmniej równe rozmiarowi punktowemu wybranej czcionki (argument do -pointsize), ponieważ ImageMagick umieści linię bazową czcionki w danym przesunięciu. Jeśli więc nie przesuniesz czcionki o co najmniej pointsizepiksele, górna część pierwszego wiersza zostanie obcięta.
Zalecam przejście o co najmniej kilka pikseli, więc jeśli używasz -pointsize 64, powinieneś sparować to z czymś takim -annotate +15+80. (Nie ma powodu, aby zwiększać przesunięcie w poziomie przy większych rozmiarach czcionek, nie ma związku z wymiarami tekstu).
Konieczność odgadnięcia niezbędnych wymiarów obrazu wyjściowego może być również uciążliwa. Zazwyczaj po prostu wybieram nadmierne wartości, a następnie korzystam z ImageMagick -trimi automatycznie -borderprzycinam wynik. Następujące polecenie:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
wyrenderuje w polu 1000 x 2000, a następnie odetnie nadmiar białej przestrzeni z wyjątkiem 10-pikselowej ramki wokół tekstu. Na +repagesamym końcu uniemożliwia utworzenie wyjściowego PNG z przesunięciem obrazu, co w przeciwnym razie spowodowałoby, że GIMP wyświetli okno dialogowe obciążenia z pytaniem, czy należy zastosować przesunięcie.
(Oczywiście, 1000 x 2000 jest nadmierny w przypadku małych plików tekstowych, a w przypadku dłuższych może być konieczne zwiększenie przynajmniej wymiaru pionowego. Łatwiej jest jednak przecenić, ponieważ jedynym kosztem jest convertzużycie nieco więcej procesora i pamięci podczas przetwarzania.)
Jeśli twój plik tekstowy nie jest już sformatowany tak, jak potrzebujesz, aby go renderować (powiedzmy, jeśli używa bardzo długich linii), być może będziesz musiał go sformatować przed przekazaniem go convert. ImageMagick nie zawinie tekstu, więc każda linia tekstu wydłuży całą długość poziomo. Na szczęście możliwe jest uruchomienie pliku za pomocą dowolnych formatatorów wiersza poleceń, a następnie potokowanie przetworzonego tekstu convertzamiast odczytu bezpośrednio z pliku:
fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png
Spowoduje to wyświetlenie zawartości ascii.txt24-punktowego DejaVu Sans Condensed po przetworzeniu przez fmtpolecenie, które w domyślnym trybie działania ponownie sformatuje dane wejściowe poprzez zawijanie słów do szerokości 75 kolumn. (O ile nie występują długie ciągi ciągłe dłuższe niż 75 znaków, takie jak adresy URL, w takim przypadku będą się one rozciągać).
Po fmtponownym sformatowaniu tekstu zostanie on przekazany do, convertktóry wyświetli dane fmtwyjściowe w potoku , tak jakby czytał bezpośrednio plik. (Podanie nazwy pliku -jest dość powszechnym skrótem powłoki UNIX dla „odczytu ze standardowego wejścia zamiast dowolnego nazwanego pliku dysku”, a narzędzia ImageMagick przestrzegają tej konwencji).
annotateargumentu powinien być większy niż pointize, aby mieć pewność, że wszystko się pojawi: convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pnggdzie 123jest pożądany rozmiar. Możesz także użyć, convert -list fontaby dowiedzieć się, które czcionki są obsługiwane ( "FreeMono"nie jest powszechnie obsługiwane).
convert -list fontpoprawna składnia, a nie convert -list fonts.
/etc/ImageMagick-7/policy.txtktóre zakłócałyby którekolwiek z tych formularzy konwersji. Czy wiesz, jakie zasady blokują konwersję i dlaczego są ustawione? (Również chwytanie za słomki: czy przypadkowo działa fmt ...formuła polecenia w potoku ? Jeśli tak, możesz po prostu zastąpić fmtją cati uzyskać taki sam wynik jak @ascii.txtwersja).
convert powiedzie, gdy użyjesz -drawformularza @ garethTheRed i wstawisz polecenia pozycjonowania do ascii.txtpliku? Wydaje mi się, że byłoby to dość dziwne , ponieważ mam problem z wyobrażeniem sobie, jakie byłyby obawy związane z bezpieczeństwem -annotate, które nie miałyby zastosowania również -drawpodczas pracy z zawartością importowanego pliku tekstowego.
/etc/ImageMagick-6/policy.xmlzawiera, <policy domain="path" rights="none" pattern="@*"/>więc chyba to jest to. stdin również nie działa, prawdopodobnie dlatego, że ma w nim również @-wzorzec. Dla zdesperowanych "$(cat ascii.txt)"działa, jeśli nie wysadzi długości CLI.