Bagaimana mengubah file teks menjadi gambar


17

Jika saya memiliki file teks biasa, bagaimana saya bisa mengubahnya menjadi file gambar melalui baris perintah? (dan melestarikan tata letak seni ASCII di dalamnya)


Saya akan mulai mencari cara otomatis untuk merender teks dengan font monospace (gimp atau LaTeX mungkin cara untuk pergi)
RSFalcon7

Ini adalah solusi yang jelek, tetapi mengapa tidak melakukannya catdan mengambil tangkapan layar?
psimon

Itu akan terlalu jelek, dan tangkapan layar akan menyertakan informasi tambahan, seperti prompt.
Quora Feans

Jika hanya prompt adalah masalah, coba ini: clear && cat file. Tapi ya, itu jelek.
psimon

tidak ada yang masih menunjukkan nama pengguna saya ... Dan kecuali saya menemukan cara membuat tangkapan layar melalui baris perintah, itu tidak akan diterima.
Quora Feans

Jawaban:


8

Anda bisa menggunakan openoffice (libreoffice) untuk melakukannya.

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

ini bekerja dengan file teks juga.


Itu mengagumkan! Saya tidak tahu OpenOffice dapat mengkonversi ke JPG ... atau PNG, yang baru saja saya coba; mungkin format lain juga. (Tidak membantu bahwa tidak disebutkan atau bahkan petunjuk tentang ini di --helpoutput.) Hanya kerut, jika teks lebih panjang dari satu halaman, sepertinya Anda hanya mendapatkan halaman pertama. (Jika ada cara untuk mengatakannya untuk menampilkan halaman lain atau beberapa file, itu tidak segera jelas bagi saya. Passing --outdirtidak membuat perbedaan.) Tetapi untuk potongan teks pendek, ini berfungsi dengan sangat baik, dan bahkan auto-wraps. Bagus!
FeRD

Ini menghasilkan halaman berukuran tetap dengan teks yang berpotensi kecil jika teksnya kecil.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Halaman berukuran tetap, benar, tetapi di situlah pemangkasan otomatis ImageMagick berguna lagi:soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
FeRD

26

imagemagickapakah temanmu disini Sesuatu yang mirip dengan yang berikut ini dapat membantu Anda: -

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black -draw @ascii.txt image.png

di mana ascii.txtfile ascii-art Anda: -

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:::::::::' 
        `':::_:' -- '' -'-' `':_::::'`  
    "

dengan text 15,15ditambahkan sebagai baris teks pertama (15,15 adalah offset posisi). Juga, pastikan bahwa teks aktual yang akan dikonversi terlampir dalam tanda kutip. Kutipan tunggal atau ganda akan berlaku, tetapi pastikan mereka tidak digunakan sebagai bagian dari ascii-art Anda karena akan membingungkan masalah.

Font yang Anda pilih harus font monospace, jika tidak, teks tidak akan selaras.

Ini menghasilkan: -

masukkan deskripsi gambar di sini


Apakah Anda memiliki petunjuk tentang cara mendapatkan daftar nama font yang valid? Sementara Free Mono tampaknya diinstal pada sistem saya, imagemagick tidak mengenalinya.
Raphael

1
@Raphael: Anda bisa mendapatkan daftar font yang saat ini tersedia dari perintah ImageMagick (termasuk konversi) menggunakan -listopsi. Jadi mis. convert -list fontAkan menunjukkan semua argumen yang mungkin untuk Anda -font.
FeRD

Anda juga dapat menginstal program ini dengan menggunakan sudo yum install ImageMagick.
rangsiman

@ R.Ketkaew Perintah itu berlaku untuk seseorang yang menjalankan Fedora 21 atau lebih rendah, atau beberapa revisi RHEL (bahkan tidak yakin apakah yang terbaru masih menggunakan yum). Pada Fedora 22+ perintah instal adalah sudo dnf install ImageMagick, dan pada sebagian besar distro Linux populer lainnya akan ada beberapa sudo apt-get install ...perintah. Apapun, informasi di atas memang mengasumsikan bahwa ImageMagick diinstal pada sistem yang bersangkutan.
FeRD

18

Saya menemukan -annotateoperator ImageMagick sedikit lebih nyaman daripada -drawmetode garethTheRed yang disarankan, karena alasan sederhana bahwa itu tidak memerlukan modifikasi dari file input. Ini tidak sekuat -draw, tetapi untuk membuang grosir file teks ke dalam sebuah gambar, itu berfungsi dengan baik.

convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png

akan menampilkan versi yang diberikan dari konten file yang diberikan, tetapi tanpa harus memodifikasi file "ascii.txt" Anda untuk mengandung text 15x15bagian -drawprimitif.

Menentukan Argumen

Argumen untuk -fontdapat berupa nama font yang didukung, jika FreeMono tidak tersedia (atau memang tidak diinginkan). Daftar font yang tersedia untuk perintah ImageMagick dapat diperoleh dengan menggunakan -listoperator, sehingga convert -list fontakan menampilkan semua argumen yang mungkin untuk-font .

Argumen untuk -annotate(seberapa jauh untuk menggeser teks yang diberikan dari tepi kanvas) terdiri dari offset pixel horizontal dan vertikal (masing-masing). Offset pertama (horizontal x-shift) dapat berupa bilangan bulat positif, tetapi tidak perlu lebih besar dari beberapa piksel. Kedua offset (vertikal y-shift) harus menjadi setidaknya sama dengan ukuran titik font yang dipilih (argumen untuk -pointsize), karena ImageMagick akan menempatkan dasar font di mengingat offset. Jadi, jika Anda tidak menggeser font ke bawah setidaknya pointsizepiksel, bagian atas baris pertama akan terpotong.

Saya sarankan pergi dengan beberapa piksel setidaknya, jadi jika Anda menggunakan -pointsize 64maka Anda harus memasangkannya dengan sesuatu seperti -annotate +15+80. (Tidak ada alasan untuk meningkatkan offset horizontal dengan ukuran font yang lebih besar, tidak ada hubungannya dengan dimensi teks.)

Perlu menebak dimensi yang diperlukan dari gambar output juga bisa membosankan. Saya biasanya hanya memilih nilai yang berlebihan, kemudian mengambil keuntungan dari ImageMagick -trimdan -borderuntuk autocrop hasilnya. Perintah berikut:

convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png

akan merender ke dalam kotak 1000x2000, kemudian memangkas kelebihan ruang putih kecuali untuk perbatasan 10-pixel di sekitar teks. Yang +repagepaling akhir mencegah PNG keluaran yang dibuat dengan offset gambar, yang sebaliknya akan menyebabkan GIMP memunculkan dialog saat memuat menanyakan apakah harus menerapkan offset.

(Jelas, 1000x2000 berlebihan untuk file teks kecil, dan untuk yang lebih lama setidaknya dimensi vertikal mungkin perlu ditingkatkan. Namun, lebih mudah untuk melebih-lebihkan, karena satu-satunya biaya adalah convertmenggunakan lebih banyak CPU dan memori saat memproses.)

Input Preprocessing

Jika file teks Anda belum diformat dengan cara yang Anda butuhkan untuk merendernya (katakanlah, jika menggunakan garis yang sangat panjang) maka Anda mungkin harus memformat ulang sebelum menyerahkannya convert. ImageMagick tidak akan membungkus teks, sehingga setiap baris teks akan memperpanjang panjang penuh secara horizontal. Untungnya, Anda dapat menjalankan file melalui formatters command-line yang Anda inginkan, kemudian menyalurkan teks yang sudah diproses ke dalam convertalih-alih membaca langsung dari file:

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

Itu akan membuat konten ascii.txtdalam 24-point DejaVu Sans Condensed, setelah diproses oleh fmtperintah, yang dalam mode operasi standarnya akan memformat ulang inputnya dengan membungkus kata dengan lebar 75 kolom. (Kecuali jika ada string berkelanjutan panjang yang lebih panjang dari 75 karakter, seperti URL, dalam hal ini mereka akan memperpanjang.)

Setelah fmtmemformat ulang teks, teks tersebut akan diteruskan ke convertyang kemudian akan memberikan hasil yang disalurkan fmt, sama seperti jika ia membaca file secara langsung. (Menentukan nama file -adalah singkatan shell UNIX yang cukup umum untuk "membaca dari input standar, alih-alih file disk yang bernama", dan alat ImageMagick mengikuti konvensi itu.)


1
Komponen annotateargumen harus lebih besar dari ukuran untuk memastikan semuanya muncul: di convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pngmana 123ukuran yang diinginkan. Anda juga dapat menggunakan convert -list fontuntuk mengetahui font mana yang didukung ( "FreeMono"tidak didukung secara universal).
Alec Jacobson

1
Koreksi: convert -list fontadalah sintaks yang benar, bukan convert -list fonts.
Sopalajo de Arrierez

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Hmm, pertanyaan bagus. Pemasangan IM7 saya tidak memiliki kebijakan yang ditetapkan /etc/ImageMagick-7/policy.txtyang mengganggu formulir konversi ini. Apakah Anda tahu kebijakan apa yang memblokir konversi, dan mengapa itu ditetapkan? (Juga, berpegang teguh: Apakah fmt ...bentuk pipa dari perintah berfungsi, kebetulan? Jika demikian, Anda bisa menggantinya fmtdengan cat, dan mendapatkan hasil yang sama dengan @ascii.txtversinya.)
FeRD

1
@CiroSantilli 新疆 改造 中心 法轮功 六四 事件 Oh, satu pertanyaan lagi: Anda menentukan "gagal ... dengan tuksedo tanpa metadata jelek". Apakah itu berarti convert berhasil ketika Anda menggunakan formulir @ garethTheRed -drawdan menyisipkan perintah penentuan posisi ke dalam ascii.txtfile? Akan aneh jika memang itu yang terjadi, bagi saya, karena saya mengalami kesulitan membayangkan masalah keamanan apa yang akan terjadi dengan -annotateitu yang juga tidak berlaku -draw, ketika mengerjakan isi dari file teks yang diimpor.
FeRD

1
Aku bahkan belum mencoba jawaban Gareth karena metadata jelek itu, tetapi itu berhasil sekarang. /etc/ImageMagick-6/policy.xmlKonten saya <policy domain="path" rights="none" pattern="@*"/>jadi saya rasa itu satu-satunya. stdin juga tidak berfungsi, mungkin karena ia juga memiliki @-polanya. Untuk yang putus asa, "$(cat ascii.txt)"bekerja jika tidak meledakkan panjang CLI.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.