अगर मेरे पास एक सादा पाठ फ़ाइल है, तो मैं इसे कमांड लाइन के माध्यम से एक छवि फ़ाइल में कैसे बदल सकता हूं? (और इसमें ASCII कला का लेआउट संरक्षित)
cat
यह क्यों नहीं और एक स्क्रीनशॉट लें?
clear && cat file
:। लेकिन हाँ, यह बदसूरत है।
अगर मेरे पास एक सादा पाठ फ़ाइल है, तो मैं इसे कमांड लाइन के माध्यम से एक छवि फ़ाइल में कैसे बदल सकता हूं? (और इसमें ASCII कला का लेआउट संरक्षित)
cat
यह क्यों नहीं और एक स्क्रीनशॉट लें?
clear && cat file
:। लेकिन हाँ, यह बदसूरत है।
जवाबों:
आप इसे करने के लिए ओपनऑफ़िस (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 कला फ़ाइल कहाँ है: -
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
विकल्प का उपयोग करके किसी भी ImageMagick कमांड (कन्वर्ट सहित) से वर्तमान में उपलब्ध फोंट की एक सूची प्राप्त कर सकते हैं । इसलिए उदा convert -list font
आप सभी को संभावित तर्कों को दिखाएगा -font
।
sudo yum install ImageMagick
।
sudo dnf install ImageMagick
, और अन्य लोकप्रिय लिनक्स डिस्ट्रोस पर यह कुछ sudo apt-get install ...
कमांड होगा। बावजूद, उपरोक्त जानकारी वास्तव में मानती है कि ImageMagick सिस्टम में प्रश्न में स्थापित है।
मुझे लगता है कि ImageMagick के -annotate
ऑपरेटर को -draw
विधि garethTheRed की तुलना में थोड़ा अधिक सुविधाजनक होना चाहिए , साधारण कारण से कि इसे इनपुट फ़ाइल के संशोधन की आवश्यकता नहीं है। यह उतना शक्तिशाली नहीं है -draw
, लेकिन एक पाठ फ़ाइल की सामग्री को एक छवि में थोक डंप करने के लिए यह ठीक काम करता है।
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
दिए गए फ़ाइल सामग्री के एक प्रदान किए गए संस्करण का उत्पादन करेगा, लेकिन आदिम के text 15x15
हिस्से को समाहित करने के लिए आपकी "ascii.txt" फ़ाइल को संशोधित किए बिना -draw
।
-font
यदि FreeMono उपलब्ध नहीं है (या केवल वांछित नहीं है) तो तर्क किसी भी समर्थित फ़ॉन्ट का नाम हो सकता है। किसी भी ImageMagick कमांड के लिए उपलब्ध फोंट की एक सूची -list
ऑपरेटर का उपयोग करके प्राप्त की जा सकती है , इसलिए convert -list font
सभी संभावित तर्कों को प्रदर्शित करेगा -font
।
-annotate
(कैनवास के किनारे से प्रदान किए गए पाठ को कैसे स्थानांतरित करना है ) के तर्क में क्षैतिज और ऊर्ध्वाधर पिक्सेल ऑफसेट (क्रमशः) शामिल हैं। पहली ऑफसेट (क्षैतिज एक्स-शिफ्ट) कोई भी सकारात्मक पूर्णांक हो सकती है, लेकिन कुछ पिक्सेल से अधिक नहीं होनी चाहिए। दूसरी ऑफसेट (वर्टिकल वाई-शिफ्ट) कम से कम चुने गए फ़ॉन्ट (तर्क ) के बिंदु आकार के बराबर होनी चाहिए , क्योंकि ImageMagick फ़ॉन्ट की आधार रेखा को दिए गए ऑफसेट पर रख देगा । इसलिए यदि आप फ़ॉन्ट को कम से कम पिक्सेल में स्थानांतरित नहीं करते हैं , तो पहली पंक्ति के शीर्ष को काट दिया जाएगा।-pointsize
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
1000x2000 बॉक्स में रेंडर करेगा, फिर टेक्स्ट के चारों ओर 10-पिक्सेल बॉर्डर को छोड़कर अतिरिक्त सफेद स्थान को ट्रिम कर देगा। +repage
बहुत अंत रोकता है पर उत्पादन पीएनजी एक छवि ऑफसेट, जो पूछा था कि क्या यह लागू करना चाहिए ऑफसेट लोड पर एक संवाद पॉप अप होगा अन्यथा कारण 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 संघनित की सामग्री को प्रस्तुत करेगा , इसके बाद इसे fmt
कमांड द्वारा संसाधित किया जाता है , जो ऑपरेशन के डिफ़ॉल्ट मोड में 75 कॉलम की चौड़ाई तक शब्द-रैपिंग द्वारा इसके इनपुट को पुन: स्वरूपित करेगा। (जब तक कि URL की तरह, 75 से अधिक लंबे तार लगातार लंबे न हों, तब तक वे जिस पर विस्तार करेंगे।)
एक बार fmt
पाठ को सुधारने के बाद, इसे पारित कर दिया जाएगा, convert
जो तब पाइप किए गए fmt
आउटपुट को प्रस्तुत करेगा , जैसे कि यह सीधे फाइल को पढ़ रहा था। (किसी फ़ाइल नाम को निर्दिष्ट करने के -
लिए "मानक इनपुट से पढ़ा गया, किसी भी नामित डिस्क फ़ाइल के बजाय" के लिए एक काफी सामान्य UNIX शेल शॉर्टहैंड है, और ImageMagick के उपकरण उस सम्मेलन का पालन करते हैं।)
annotate
तर्क का y घटक यह सुनिश्चित करने के लिए बड़ा होना चाहिए कि सब कुछ दिखाई देता है: 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
सफल होता है ? यह बहुत विचित्र होगा, अगर ऐसा है, तो मुझे लगता है, क्योंकि मुझे यह कल्पना करने में परेशानी हो रही है कि एक आयातित पाठ फ़ाइल की सामग्री से काम करते समय उस पर क्या सुरक्षा चिंताएं होंगी जो लागू नहीं होंगी । -draw
ascii.txt
-annotate
-draw
/etc/ImageMagick-6/policy.xml
शामिल है <policy domain="path" rights="none" pattern="@*"/>
इसलिए मैं अनुमान लगा रहा हूं कि यह एक है। स्टड भी काम नहीं करता है, संभवतः क्योंकि इसमें भी @-
पैटर्न है। हताश के लिए, "$(cat ascii.txt)"
काम करता है अगर यह सीएलआई लंबाई को उड़ा नहीं करता है।