टेक्स्ट फाइल को तस्वीर में कैसे बदलें


17

अगर मेरे पास एक सादा पाठ फ़ाइल है, तो मैं इसे कमांड लाइन के माध्यम से एक छवि फ़ाइल में कैसे बदल सकता हूं? (और इसमें ASCII कला का लेआउट संरक्षित)


मैं एक मोनोपेस फॉन्ट (जिम्प या LaTeX जाने का रास्ता हो सकता है) के साथ टेक्स्ट रेंडर करने के लिए एक स्वचालित तरीके की तलाश शुरू
करूंगा

यह एक बदसूरत समाधान है, लेकिन सिर्फ catयह क्यों नहीं और एक स्क्रीनशॉट लें?
Psimon

यह बहुत बदसूरत होगा, और एक स्क्रीनशॉट में प्रॉम्प्ट की तरह अतिरिक्त जानकारी शामिल होगी।
Quora Feans

यदि केवल प्रॉम्प्ट समस्या है, तो यह प्रयास करें clear && cat file:। लेकिन हाँ, यह बदसूरत है।
Psimon

नहीं, जो अभी भी मेरा उपयोगकर्ता नाम दिखाएगा ... और जब तक मुझे कमांड लाइन के माध्यम से स्क्रीनशॉट बनाने का कोई तरीका नहीं मिलेगा, यह स्वीकार्य नहीं होगा।
Quora Feans

जवाबों:


8

आप इसे करने के लिए ओपनऑफ़िस (libreoffice) का उपयोग कर सकते हैं।

soffice --convert-to jpg "Textfile.doc"

यह पाठ फ़ाइलों के साथ भी काम करता है।


यह बहुत अच्छा है! मुझे नहीं पता था कि ओपनऑफिस जेपीजी में परिवर्तित हो सकता है ... या पीएनजी, जो मैंने अभी कोशिश की थी; शायद अन्य प्रारूप भी। (यह मदद नहीं करता है कि --helpआउटपुट में इसका कोई उल्लेख या संकेत नहीं है ।) केवल शिकन, यदि पाठ एक पृष्ठ से अधिक लंबा है, तो ऐसा लगता है कि आप केवल पहला पृष्ठ प्राप्त करते हैं। (यदि अन्य पृष्ठों या एकाधिक फ़ाइलों को आउटपुट करने के लिए इसे बताने का कोई तरीका है, तो यह मेरे लिए तुरंत स्पष्ट नहीं है। पासिंग में --outdirकोई अंतर नहीं है।) लेकिन पाठ के छोटे बिट्स के लिए, यह अच्छी तरह से काम करता है, और यहां तक ​​कि ऑटो-रैप भी। अच्छा!
FeRD

यदि पाठ छोटा है तो यह उस पर संभावित छोटे पाठ के साथ एक निश्चित आकार का पृष्ठ बनाता है।
सिरो सेंटिल्ली 新疆 改造 i i 事件 '10

1
@CiroSantilli 新疆 ill ill size size size size निश्चित-आकार का पृष्ठ, सत्य, लेकिन यही वह जगह है जहाँ ImageMagick का ऑटो-क्रॉपिंग फिर से काम में आता है:soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
FeRD

26

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 एक स्थितीय ऑफसेट है)। इसके अलावा, सुनिश्चित करें कि परिवर्तित किया जाने वाला वास्तविक पाठ उद्धरणों में संलग्न है। सिंगल या डबल कोट्स करेंगे, लेकिन सुनिश्चित करें कि वे आपकी अस्की-आर्ट के हिस्से के रूप में उपयोग नहीं किए जाते हैं क्योंकि यह मामलों को भ्रमित करेगा।

आपके द्वारा चुना गया फ़ॉन्ट एक मोनोपोज़्ड फ़ॉन्ट होना चाहिए, अन्यथा पाठ संरेखित नहीं होगा।

इससे उत्पादन होता है: -

यहाँ छवि विवरण दर्ज करें


क्या आपके पास इस बात का संकेत है कि वैध फ़ॉन्ट नामों की सूची कैसे प्राप्त करें? जबकि फ्री मोनो मेरे सिस्टम पर स्थापित किया जा रहा है, इमेजमाजिक इसे पहचान नहीं पाता है।
राफेल

1
@ राफेल: आप -listविकल्प का उपयोग करके किसी भी ImageMagick कमांड (कन्वर्ट सहित) से वर्तमान में उपलब्ध फोंट की एक सूची प्राप्त कर सकते हैं । इसलिए उदा convert -list fontआप सभी को संभावित तर्कों को दिखाएगा -font
FeRD

आप इस प्रोग्राम का उपयोग करके भी स्थापित कर सकते हैं sudo yum install ImageMagick
रासिमन

@ R.Ketkaew यह आदेश फेडोरा 21 या उससे कम चलाने वाले या आरएचईएल के कुछ संशोधनों के लिए मान्य है (यह भी सुनिश्चित नहीं है कि नवीनतम अभी भी यम का उपयोग कर रहा है)। फेडोरा 22+ पर इंस्टाल कमांड है sudo dnf install ImageMagick, और अन्य लोकप्रिय लिनक्स डिस्ट्रोस पर यह कुछ sudo apt-get install ...कमांड होगा। बावजूद, उपरोक्त जानकारी वास्तव में मानती है कि ImageMagick सिस्टम में प्रश्न में स्थापित है।
FeRD

18

मुझे लगता है कि 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 फ़ॉन्ट की आधार रेखा को दिए गए ऑफसेट पर रख देगा । इसलिए यदि आप फ़ॉन्ट को कम से कम पिक्सेल में स्थानांतरित नहीं करते हैं , तो पहली पंक्ति के शीर्ष को काट दिया जाएगा।-pointsizepointsize

मैं कम से कम कई पिक्सल्स के ऊपर जाने की सलाह देता हूं, इसलिए यदि आप उपयोग कर रहे हैं -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.txt24-बिंदु DejaVu Sans संघनित की सामग्री को प्रस्तुत करेगा , इसके बाद इसे fmtकमांड द्वारा संसाधित किया जाता है , जो ऑपरेशन के डिफ़ॉल्ट मोड में 75 कॉलम की चौड़ाई तक शब्द-रैपिंग द्वारा इसके इनपुट को पुन: स्वरूपित करेगा। (जब तक कि URL की तरह, 75 से अधिक लंबे तार लगातार लंबे न हों, तब तक वे जिस पर विस्तार करेंगे।)

एक बार fmtपाठ को सुधारने के बाद, इसे पारित कर दिया जाएगा, convertजो तब पाइप किए गए fmtआउटपुट को प्रस्तुत करेगा , जैसे कि यह सीधे फाइल को पढ़ रहा था। (किसी फ़ाइल नाम को निर्दिष्ट करने के -लिए "मानक इनपुट से पढ़ा गया, किसी भी नामित डिस्क फ़ाइल के बजाय" के लिए एक काफी सामान्य UNIX शेल शॉर्टहैंड है, और ImageMagick के उपकरण उस सम्मेलन का पालन करते हैं।)


1
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"सार्वभौमिक रूप से समर्थित नहीं हैं)।
एलेक जैकबसन

1
सुधार: convert -list fontसही वाक्यविन्यास है, नहीं convert -list fonts
सोपालजो डे एरिएरेस

1
@CiroSantilli 新疆 改造 法轮功 ill 事件 good हम्म, अच्छा सवाल है। मेरी IM7 स्थापित में ऐसी कोई नीति नहीं है, /etc/ImageMagick-7/policy.txtजो इनमें से किसी भी रूप में हस्तक्षेप करती हो। क्या आप जानते हैं कि नीति किस नीति को रूपांतरित कर रही है और यह क्यों सेट है? (इसके अलावा, तिनके पर लोभी: क्या fmt ...किसी भी तरह से कमांड का पाइप काम करता है? यदि हां, तो आप बस के fmtसाथ बदल सकते हैं cat, और @ascii.txtसंस्करण के रूप में एक ही परिणाम प्राप्त कर सकते हैं ।)
FeRD

1
@CiroSantilli 新疆 改造 法轮功 六四 事件 one ओह, एक और सवाल: आपने निर्दिष्ट किया "असफल ... बदसूरत मेटाडेटा के बिना टक्स के साथ"। क्या इसका मतलब यह है कि जब आप @ garethTheRed के फॉर्म का उपयोग करते हैं और फ़ाइल में पोजिशनिंग कमांड डालते हैं तो वह convert सफल होता है ? यह बहुत विचित्र होगा, अगर ऐसा है, तो मुझे लगता है, क्योंकि मुझे यह कल्पना करने में परेशानी हो रही है कि एक आयातित पाठ फ़ाइल की सामग्री से काम करते समय उस पर क्या सुरक्षा चिंताएं होंगी जो लागू नहीं होंगी । -drawascii.txt-annotate-draw
FeRD

1
मैंने बदसूरत मेटाडेटा के कारण गैरेथ के जवाब की कोशिश भी नहीं की थी, लेकिन अब यह काम किया है। मेरा /etc/ImageMagick-6/policy.xmlशामिल है <policy domain="path" rights="none" pattern="@*"/>इसलिए मैं अनुमान लगा रहा हूं कि यह एक है। स्टड भी काम नहीं करता है, संभवतः क्योंकि इसमें भी @-पैटर्न है। हताश के लिए, "$(cat ascii.txt)"काम करता है अगर यह सीएलआई लंबाई को उड़ा नहीं करता है।
सिरो सेंटिल्ली 新疆 i i i 事件 ''
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.