Якщо у мене є звичайний текстовий файл, як я можу перетворити його у файл зображення через командний рядок? (і зберегти макет ASCII мистецтва в ньому)
catтак зробити знімок екрана?
clear && cat file. Але так, це некрасиво.
Якщо у мене є звичайний текстовий файл, як я можу перетворити його у файл зображення через командний рядок? (і зберегти макет ASCII мистецтва в ньому)
catтак зробити знімок екрана?
clear && cat file. Але так, це некрасиво.
Відповіді:
Ви можете використовувати openoffice (libreoffice) для цього.
soffice --convert-to jpg "Textfile.doc"
він працює і з текстовими файлами.
--help .) Тільки зморшки, якщо текст довший сторінки, схоже, ви отримуєте лише першу сторінку. (Якщо є спосіб сказати це для виведення інших сторінок або декількох файлів, для мене це не відразу очевидно. Передача --outdirне має ніякого значення.) Але для коротких шматочків тексту він працює НАДЕЖДО добре, і навіть автоматично перегортає. Приємно!
soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
imagemagickтвій друг тут. Щось подібне до цього може допомогти вам:
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png
де ascii.txtваш файл 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:::::::::'
`':::_:' -- '' -'-' `':_::::'`
"
з text 15,15доданим як перший рядок тексту (15,15 - це зміщення позиції). Також переконайтесь, що власне текст, який потрібно перетворити, укладений у лапки. Одиночні або подвійні лапки будуть, але переконайтеся, що вони не використовуються як частина вашого мистецтва, оскільки це буде заплутати справи.
Обраний вами шрифт повинен бути односхилим шрифтом, інакше текст не вирівняється.
Це дає:

-listопцію. Так, наприклад convert -list font, показав би вам всі можливі аргументи -font.
sudo yum install ImageMagick.
sudo dnf install ImageMagick, а в більшості інших популярних дистрибутивів Linux це буде деяка sudo apt-get install ...команда. Незалежно від наведеної вище інформації дійсно передбачається, що ImageMagick встановлений у відповідній системі.
Я вважаю, що -annotateоператор ImageMagick трохи зручніший, ніж запропонований -drawметод garethTheRed, з тієї простої причини, що він не потребує модифікації вхідного файлу. Це не так потужно, як-draw , але для оптового завантаження вмісту текстового файлу у зображення він служить чудово.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
виведе візуалізовану версію заданого вмісту файлу, але без необхідності змінювати файл "ascii.txt", щоб він містив text 15x15 частину -drawпримітиву.
Аргументом -fontможе бути будь-яке підтримуване ім'я шрифту, якщо FreeMono недоступний (або просто не бажаний). Список шрифтів, доступних для будь-якої команди ImageMagick, можна отримати за допомогою -listоператора, такconvert -list font буде відображено всі можливі аргументи для -font.
Аргументи -annotate(як далеко змістити виведений текст з краю полотна) складаються з горизонтального та вертикального зміщення пікселів (відповідно). Першим зміщенням (горизонтальний зсув x) може бути будь-яке додатне ціле число, але не повинно бути більше кількох пікселів. Другий зсув (вертикальний зсув y) повинен бути принаймні рівним розміру точки обраного шрифту (аргумент до -pointsize), оскільки ImageMagick розмістить базову лінію шрифту при заданому зміщенні. Тож якщо ви не змістите шрифт вниз принаймні на pointsizeпікселі, верхній частині першого рядка буде відрізано.
Я рекомендую перейти на кілька пікселів принаймні, так що якщо ви використовуєте, -pointsize 64то слід зіставити це з чимось на зразок-annotate +15+80 . (Немає причин збільшувати горизонтальне зміщення з більшими розмірами шрифту, воно не має відношення до розмірів тексту.)
Необхідність відгадати необхідні розміри вихідного зображення також може бути стомлюючою. Зазвичай я просто підбираю надмірні значення, а потім користуюся перевагою ImageMagick -trimі автоматично -borderобробляю результат. Наступна команда:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
буде виведено у вікно розміром 1000х2000, а потім обріже зайвий пробіл, за винятком межі 10 пікселів у всьому протязі тексту. The+repage самому кінці запобігає створенню PNG виводу зі зміщенням зображення, що в іншому випадку призведе до появи GIMP діалогового вікна із завантаженням із запитом, чи слід застосовувати зміщення.
(Очевидно, що 1000x2000 є надмірним для невеликих текстових файлів, а для довших - принаймні вертикальний розмір, можливо, потрібно буде збільшити. Однак це простіше переоцінити, оскільки єдині витрати convertвитрачають трохи більше процесора та пам'яті під час обробки.)
Якщо ваш текстовий файл ще не відформатований так, як вам потрібно для його відображення (скажімо, якщо він використовує дуже довгі рядки), можливо, вам доведеться переформатувати його перед тим, як передавати його convert. ImageMagick не оберне текст, тому кожен рядок тексту буде розширювати його по всій довжині по горизонталі. На щастя, можна запустити файл через будь-який формат командного рядка, який ви хочете, а потім передайте оброблений текст, convertа не читати безпосередньо з файлу:
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
Це візуалізує вміст ascii.txtу 24-кратній DejaVu Sans Condensed, після того як вона буде оброблена fmtкомандою, яка в режимі роботи за замовчуванням переформатує свій введення шляхом перенесення слів на ширину 75 стовпців. (Якщо немає довгих безперервних рядків довжиною більше 75 символів, як-от URL-адреси, і в цьому випадку вони поширюватимуться.)
Після fmtтого як текст переформатується, він буде переданий, після convertчого він буде надавати конвеєрний fmtвисновок так само, як якщо б він читав файл безпосередньо. (Вказівка імені файлу -є досить поширеною скороченням оболонки UNIX для "читати зі стандартного вводу замість будь-якого названого файлу диска", а інструменти ImageMagick дотримуються цієї конвенції.)
annotateаргументу повинен бути більшим, ніж pointize, щоб бути впевненим, що все з'являється: convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pngде 123потрібний розмір. Крім того, ви можете convert -list fontдізнатися, які шрифти підтримуються ( "FreeMono"не підтримуються універсально).
convert -list fontправильний синтаксис, а не convert -list fonts.
/etc/ImageMagick-7/policy.txtяка б заважала будь-якій із цих форм перетворення. Чи знаєте ви, яка політика блокує конверсію, і чому вона встановлена? (Крім того , хапаючись за соломинку: Чи має водопровідну fmt ...форму командної роботи, випадково Якщо це так, ви могли б просто замінити? fmtС cat, і отримати той же результат, що і @ascii.txtверсії.)
convert вдається при використанні @ garethTheRed в -drawформі і вставити команди позиціонування в ascii.txtфайл? Мені здається, це було б досить химерно, якщо це так, як мені здається, оскільки у мене виникають труднощі уявити, які проблеми щодо безпеки можуть бути з цим, -annotateщо це також не стосуватиметься під -drawчас опрацювання вмісту імпортованого текстового файлу.
/etc/ImageMagick-6/policy.xmlмістить, <policy domain="path" rights="none" pattern="@*"/>тому я здогадуюсь, що це один. stdin також не працює, імовірно, тому що він також має @-в ньому схему. Для відчайдуху "$(cat ascii.txt)"працює, якщо він не підірве довжину CLI.