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)
cat
tego 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)
cat
tego 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.
--help
wyjś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 --outdir
nie 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
imagemagick
jest 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.txt
jest 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,15
dodanym 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:
-list
opcji. Na przykład convert -list font
pokaż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 -annotate
operator ImageMagick jest nieco wygodniejszy niż -draw
sugerował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 15x15
część operacji -draw
podstawowej.
Argumentem -font
moż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ą -list
operatora, więc convert -list font
wyś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 pointsize
piksele, 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 -trim
i automatycznie -border
przycinam 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 +repage
samym 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 convert
zuż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 convert
zamiast 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.txt
24-punktowego DejaVu Sans Condensed po przetworzeniu przez fmt
polecenie, 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 fmt
ponownym sformatowaniu tekstu zostanie on przekazany do, convert
który wyświetli dane fmt
wyjś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).
annotate
argumentu 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.png
gdzie 123
jest pożądany rozmiar. Możesz także użyć, convert -list font
aby dowiedzieć się, które czcionki są obsługiwane ( "FreeMono"
nie jest powszechnie obsługiwane).
convert -list font
poprawna składnia, a nie convert -list fonts
.
/etc/ImageMagick-7/policy.txt
któ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ć fmt
ją cat
i uzyskać taki sam wynik jak @ascii.txt
wersja).
convert
powiedzie, gdy użyjesz -draw
formularza @ garethTheRed i wstawisz polecenia pozycjonowania do ascii.txt
pliku? 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ż -draw
podczas pracy z zawartością importowanego pliku tekstowego.
/etc/ImageMagick-6/policy.xml
zawiera, <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.