วิธีแปลงไฟล์ข้อความให้เป็นรูปภาพ


17

หากฉันมีไฟล์ข้อความธรรมดาฉันจะแปลงเป็นไฟล์รูปภาพผ่านบรรทัดคำสั่งได้อย่างไร (และรักษาเลย์เอาต์ของศิลปะ ASCII ในนั้น)


ฉันจะเริ่มหาวิธีอัตโนมัติในการแสดงข้อความด้วยตัวอักษร monospace (gimp หรือ LaTeX อาจเป็นวิธีที่จะไป)
RSFalcon7

นี่เป็นวิธีแก้ปัญหาที่น่าเกลียด แต่ทำไมไม่เพียงแค่catจับภาพหน้าจอ
psimon

นั่นน่าเกลียดเกินไปและภาพหน้าจอจะมีข้อมูลเพิ่มเติมเช่นพรอมต์
Quora Feans

ถ้าเพียง clear && cat fileแต่พรอมต์ที่เป็นปัญหาลองนี้ แต่ใช่มันน่าเกลียด
psimon

ไม่นั่นจะยังคงแสดงชื่อผู้ใช้ของฉัน ... และถ้าฉันไม่พบวิธีสร้างภาพหน้าจอผ่านบรรทัดคำสั่งมันจะไม่เป็นที่ยอมรับ
Quora Feans

คำตอบ:


8

คุณสามารถใช้ openoffice (libreoffice) เพื่อทำมัน

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

ทำงานกับไฟล์ข้อความได้เช่นกัน


นั่นมันยอดเยี่ยม! ฉันไม่รู้ว่า OpenOffice สามารถแปลงเป็น JPG ... หรือ PNG ซึ่งฉันเพิ่งลอง อาจเป็นรูปแบบอื่นเช่นกัน (ไม่ได้ช่วยไม่ได้มีการพูดถึงหรือแม้แต่คำใบ้ใน--helpผลลัพธ์) รอยย่นถ้าข้อความยาวกว่าหน้าดูเหมือนว่าคุณจะได้หน้าแรกเท่านั้น (ถ้ามีวิธีบอกให้เอาท์พุทหน้าอื่น ๆ หรือไฟล์หลาย ๆ ไฟล์มันก็ไม่เห็นได้ชัดเลยสำหรับฉันเลยการผ่าน--outdirไม่มีความแตกต่าง) แต่สำหรับข้อความสั้น ๆ มันใช้งานได้ดีมากและแม้กระทั่งการตัดคำอัตโนมัติ ดี!
FeRD

สิ่งนี้จะสร้างหน้าที่มีขนาดคงที่โดยมีข้อความเล็ก ๆ อยู่หากข้อความนั้นมีขนาดเล็ก
Ciro Santilli 新疆改造中心法轮功六四事件

1
@CiroSantilli page 改造中心 where 六四事件หน้าขนาดคงที่จริง แต่นั่นคือที่การปลูกพืชอัตโนมัติของ 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-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 เป็นออฟเซ็ตตำแหน่ง) นอกจากนี้ตรวจสอบให้แน่ใจว่าข้อความจริงที่จะแปลงนั้นอยู่ในเครื่องหมายคำพูด คำพูดเดียวหรือสองครั้งจะทำ แต่ให้แน่ใจว่าพวกเขาไม่ได้ใช้เป็นส่วนหนึ่งของศิลปะ ASCII ของคุณเพราะมันจะสร้างความสับสนเรื่อง

แบบอักษรที่คุณเลือกควรเป็นแบบตัวอักษร monospaced มิฉะนั้นข้อความจะไม่จัดแนว

สิ่งนี้ผลิต: -

ป้อนคำอธิบายรูปภาพที่นี่


คุณมีคำแนะนำในการรับรายชื่อตัวอักษรที่ถูกต้องหรือไม่? แม้ว่าดูเหมือนว่าจะติดตั้ง Free Mono บนระบบของฉัน แต่ imagemagick ไม่รู้จัก
กราฟิลส์

1
@Raphael: คุณสามารถรับรายการของแบบอักษรที่มีอยู่ในปัจจุบันจากคำสั่ง ImageMagick ใด ๆ (รวมถึงการแปลง) โดยใช้-listตัวเลือก ดังนั้นเช่นconvert -list fontจะแสดงข้อโต้แย้งที่เป็นไปได้ทั้งหมดให้-fontคุณ
FeRD

sudo yum install ImageMagickนอกจากนี้คุณยังสามารถติดตั้งโปรแกรมนี้ได้โดยใช้
rangsiman

@ R.Ketkaew คำสั่งนั้นใช้ได้สำหรับคนที่ใช้งาน Fedora 21 หรือต่ำกว่าหรือการแก้ไข RHEL บางอย่าง (ไม่แน่ใจว่าถ้าล่าสุดยังใช้ yum อยู่) ใน Fedora 22+ คำสั่งติดตั้งคือsudo dnf install ImageMagickและใน Linux distros ยอดนิยมอื่น ๆ ส่วนใหญ่จะเป็นsudo apt-get install ...คำสั่งบางส่วน ไม่ว่าข้อมูลข้างต้นจะถือว่าสมมติว่า ImageMagick ได้รับการติดตั้งบนระบบที่เป็นปัญหา
FeRD

18

ฉันคิดว่า-annotateตัวดำเนินการของ ImageMagick สะดวกกว่า-drawวิธีที่แนะนำเล็กน้อยเพราะเหตุผลง่ายๆที่ไม่ต้องการการแก้ไขไฟล์อินพุต มันไม่ได้มีประสิทธิภาพมาก-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-shift) สามารถเป็นจำนวนเต็มบวกใด ๆ ได้ แต่ไม่จำเป็นต้องมากกว่าสองสามพิกเซล สองชดเชย (แนวตั้ง Y-Shift) จะต้องเป็นอย่างน้อยเท่ากับขนาดจุดของตัวอักษรที่เลือก (อาร์กิวเมนต์ไป-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

จะแสดงผลเป็นช่องขนาด 1,000x2000 จากนั้นตัดพื้นที่สีขาวส่วนเกินออกยกเว้นเส้นขอบ 10 พิกเซลไปรอบ ๆ ข้อความ +repageที่ป้องกันไม่ให้ท้ายสุด PNG เอาท์พุทที่ถูกสร้างขึ้นด้วยภาพชดเชยซึ่งจะเป็นอย่างอื่นสาเหตุ GIMP จะปรากฏขึ้นโต้ตอบในการโหลดถามว่ามันควรจะใช้การชดเชย

(เห็นได้ชัดว่า 1000x2000 มากเกินไปสำหรับไฟล์ข้อความขนาดเล็กและสำหรับอีกคนอย่างน้อยแนวตั้งอาจต้องมีการเพิ่มขึ้น. มันง่ายที่จะประเมินค่าสูง แต่เป็นค่าใช้จ่ายเพียงอย่างเดียวคือconvertการบริโภคของ CPU มากกว่าเล็กน้อยและหน่วยความจำในขณะที่การประมวลผล.)

การประมวลผลอินพุตล่วงหน้า

หากไฟล์ข้อความของคุณไม่ได้ฟอร์แมตแล้วในแบบที่คุณต้องการเพื่อที่จะทำให้มัน (พูดถ้าจะใช้สายยาวมาก) 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 คอลัมน์ (เว้นแต่จะมีสตริงต่อเนื่องที่ยาวเกินกว่า 75 ตัวอักษรเช่น URL ซึ่งในกรณีนี้มันจะขยายออกไป)

เมื่อfmtมีการจัดรูปแบบข้อความใหม่มันจะถูกส่งไปconvertที่ซึ่งจะแสดงผล piped fmtเช่นเดียวกับถ้ามันกำลังอ่านไฟล์โดยตรง (การระบุชื่อไฟล์-เป็นชวเลข UNIX เชลล์ที่ค่อนข้างธรรมดาสำหรับ "อ่านจากอินพุตมาตรฐานแทนไฟล์ดิสก์ที่มีชื่อ" และเครื่องมือของ ImageMagick จะเป็นไปตามแบบแผนนั้น)


1
องค์ประกอบ Y ของ annotateอาร์กิวเมนต์ควรจะมีขนาดใหญ่กว่า pointsize เพื่อให้แน่ใจว่าทุกอย่างจะปรากฏขึ้น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"ไม่ได้รับการสนับสนุนในระดับสากล)
Alec Jacobson

1
การแก้ไข: เป็นไวยากรณ์ที่ถูกต้องไม่ได้convert -list font convert -list fonts
Sopalajo de Arrierez

1
@CiroSantilli 新疆改造中心法轮功六四事件อืมคำถามที่ดี การติดตั้ง IM7 ของฉันไม่มีการตั้งค่านโยบายใด ๆ/etc/ImageMagick-7/policy.txtที่รบกวนการแปลงรูปแบบใด ๆ เหล่านี้ คุณรู้หรือไม่ว่านโยบายใดบล็อกการแปลงและเหตุใดจึงมีการตั้งค่า (นอกจากนี้การเข้าใจที่ straws: fmt ...รูปแบบpiped ของคำสั่งทำงานโดยบังเอิญหรือไม่ถ้าเป็นเช่นนั้นคุณสามารถแทนที่fmtด้วยcatและได้ผลลัพธ์เดียวกันกับ@ascii.txtเวอร์ชั่น)
FeRD

1
@CiroSantilli 新疆改造中心法轮功六四事件โอ้อีกหนึ่งคำถาม: คุณระบุว่า "ล้มเหลว ... ด้วยทักซ์โดยไม่มีเมตาดาต้าที่น่าเกลียด" หมายความว่าconvert สำเร็จเมื่อคุณใช้-drawรูปแบบของ @ garethTheRed และแทรกคำสั่งการวางตำแหน่งลงในascii.txtไฟล์หรือไม่ มันคงจะแปลกมากหากเป็นเช่นนั้นดูเหมือนกับฉันเนื่องจากฉันมีปัญหาในการจินตนาการว่าความกังวลด้านความปลอดภัยจะเป็นอย่างไร-annotateหากไม่ได้ใช้-drawเนื้อหาของไฟล์ข้อความที่นำเข้า
FeRD

1
ฉันไม่ได้ลองคำตอบของกาเร็ ธ เพราะข้อมูลเมตาน่าเกลียด แต่ตอนนี้ใช้ได้แล้ว ที่/etc/ImageMagick-6/policy.xmlบรรจุของฉัน<policy domain="path" rights="none" pattern="@*"/>ดังนั้นฉันคาดเดาว่าเป็นสิ่งนั้น stdin ก็ใช้งานไม่ได้เช่นกันเพราะมันมี@-ลวดลายอยู่ด้วย สำหรับผู้ที่หมดหวัง"$(cat ascii.txt)"ทำงานหากไม่ได้ทำให้ CLI ยาวขึ้น
Ciro Santilli 新疆改造中心法轮功六四事件
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.