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

-listตัวเลือก ดังนั้นเช่นconvert -list fontจะแสดงข้อโต้แย้งที่เป็นไปได้ทั้งหมดให้-fontคุณ
sudo yum install ImageMagickนอกจากนี้คุณยังสามารถติดตั้งโปรแกรมนี้ได้โดยใช้
sudo dnf install ImageMagickและใน Linux distros ยอดนิยมอื่น ๆ ส่วนใหญ่จะเป็นsudo apt-get install ...คำสั่งบางส่วน ไม่ว่าข้อมูลข้างต้นจะถือว่าสมมติว่า ImageMagick ได้รับการติดตั้งบนระบบที่เป็นปัญหา
ฉันคิดว่า-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 จะเป็นไปตามแบบแผนนั้น)
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"ไม่ได้รับการสนับสนุนในระดับสากล)
convert -list font convert -list fonts
/etc/ImageMagick-7/policy.txtที่รบกวนการแปลงรูปแบบใด ๆ เหล่านี้ คุณรู้หรือไม่ว่านโยบายใดบล็อกการแปลงและเหตุใดจึงมีการตั้งค่า (นอกจากนี้การเข้าใจที่ straws: fmt ...รูปแบบpiped ของคำสั่งทำงานโดยบังเอิญหรือไม่ถ้าเป็นเช่นนั้นคุณสามารถแทนที่fmtด้วยcatและได้ผลลัพธ์เดียวกันกับ@ascii.txtเวอร์ชั่น)
convert สำเร็จเมื่อคุณใช้-drawรูปแบบของ @ garethTheRed และแทรกคำสั่งการวางตำแหน่งลงในascii.txtไฟล์หรือไม่ มันคงจะแปลกมากหากเป็นเช่นนั้นดูเหมือนกับฉันเนื่องจากฉันมีปัญหาในการจินตนาการว่าความกังวลด้านความปลอดภัยจะเป็นอย่างไร-annotateหากไม่ได้ใช้-drawเนื้อหาของไฟล์ข้อความที่นำเข้า
/etc/ImageMagick-6/policy.xmlบรรจุของฉัน<policy domain="path" rights="none" pattern="@*"/>ดังนั้นฉันคาดเดาว่าเป็นสิ่งนั้น stdin ก็ใช้งานไม่ได้เช่นกันเพราะมันมี@-ลวดลายอยู่ด้วย สำหรับผู้ที่หมดหวัง"$(cat ascii.txt)"ทำงานหากไม่ได้ทำให้ CLI ยาวขึ้น