Bir metin dosyasını resme dönüştürme


17

Düz metin dosyam varsa, komut satırından nasıl resim dosyasına dönüştürebilirim? (ve içindeki ASCII sanatının düzenini koru)


Tek aralıklı yazı tipi (gimp veya LaTeX gitmek için bir yol olabilir) ile metin oluşturmanın otomatik bir yolunu aramaya
başlardım

Bu çirkin bir çözüm, ama neden sadece catve ekran görüntüsü almıyorsunuz?
psimon

Bu çok çirkin olurdu ve bir ekran görüntüsü bilgi istemi gibi ek bilgiler içerecektir.
Quora Feans

Sadece istemi sorun ise, bu deneyin: clear && cat file. Ama evet, bu çirkin.
psimon

hayır bu yine de kullanıcı adımı gösterecektir ... Ve komut satırından ekran görüntüsü almanın bir yolunu bulamazsam, kabul edilemez.
Quora Feans

Yanıtlar:


8

Bunu yapmak için openoffice (libreoffice) kullanabilirsiniz.

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

metin dosyalarıyla da çalışır.


Bu mükemmel! OpenOffice'in az önce denediğim JPG ... veya PNG'ye dönüştürebileceği hakkında hiçbir fikrim yoktu; muhtemelen diğer biçimler de. ( --helpÇıktıda bundan bahsetmeme hatta ipucu vermemeye yardımcı olmaz .) Sadece kırışıklık, metin bir sayfadan daha uzunsa, sadece ilk sayfayı aldığınız anlaşılıyor. (Diğer sayfaları veya birden fazla dosyayı çıktısını almanın bir yolu varsa, bu benim için hemen açık değildir. Geçiş --outdirhiçbir fark yaratmaz .) Ancak kısa metin parçaları için, ÇOK iyi çalışır ve hatta otomatik olarak sarılır. Güzel!
FeRD

Bu, metin küçükse üzerinde potansiyel olarak kük metin olan sabit boyutlu bir sayfa oluşturur.
9'da Ciro Santilli: 新疆 中心 事件 六四 事件

1
@CiroSantilli 事件 改造 中心 法轮功 六四 事件 Sabit boyutlu sayfa, doğru, ancak ImageMagick'in otomatik kırpması burada tekrar soffice --convert-to jpg ascii.txt && mogrify -trim -bordercolor "#FFF" -border 10 +repage ascii.jpg
işe yarıyor

26

imagemagickarkadaşın burada. Aşağıdakine benzer bir şey size yardımcı olabilir: -

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

ascii.txtascii-art dosyanız nerede : -

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

ile text 15,15metnin ilk satır olarak (15,15 ofset konum olan). Ayrıca, dönüştürülecek metnin tırnak içine alındığından emin olun. Tek ya da çift tırnaklar, ancak ascii-artınızın bir parçası olarak kullanılmadığından emin olun çünkü konuları karıştıracaktır.

Seçtiğiniz yazı tipi tek aralıklı yazı tipi olmalıdır, aksi takdirde metin hizalanmaz.

Bu şunu üretir: -

resim açıklamasını buraya girin


Geçerli yazı tipi adlarının bir listesini nasıl alacağınıza dair bir ipucunuz var mı? Free Mono sistemime yüklenmiş gibi görünse de, imagemagick bunu tanımıyor.
Raphael

1
@Raphael: -listSeçeneği kullanarak herhangi bir ImageMagick komutundan (convert dahil) şu anda kullanılabilir fontların bir listesini alabilirsiniz . Örneğin convert -list font, size olası tüm argümanları gösterecektir -font.
FeRD

Bu programı kullanarak da yükleyebilirsiniz sudo yum install ImageMagick.
rangsiman

@ R.Ketkaew Bu komut Fedora 21 veya daha eski sürümleri ya da bazı RHEL revizyonları için geçerlidir (en yeninin hala yum kullanıp kullanmadığından emin değilsiniz). Fedora 22 ve sonraki sudo dnf install ImageMagicksürümlerinde install komutu ve diğer popüler Linux dağıtımlarında bazı sudo apt-get install ...komutlar olacaktır. Ne olursa olsun, yukarıdaki bilgiler gerçekten de ImageMagick'in söz konusu sisteme yüklendiğini varsayar.
FeRD

18

ImageMagick'in -annotateoperatörünün -drawgarethTheRed'in önerdiği yöntemden biraz daha uygun olduğunu düşünüyorum, çünkü basitçe giriş dosyasının değiştirilmesini gerektirmiyor. Bu kadar güçlü değil -draw, ancak bir metin dosyasının içeriğinin bir görüntüye toptan dökülmesi için iyi hizmet veriyor.

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

verilen dosya içeriklerinin işlenmiş bir sürümünü çıkarır, ancak "ascii.txt" dosyanızı ilkel text 15x15parçayı içerecek şekilde değiştirmek zorunda kalmazsınız -draw.

Bağımsız Değişkenleri Belirtme

-fontFreeMono yoksa (veya sadece istenmiyorsa) argümanı desteklenen herhangi bir yazı tipi adı olabilir. Herhangi bir ImageMagick komutu tarafından kullanılabilen yazı tiplerinin bir listesi -listoperatör kullanılarak elde edilebilir , böylece convert -list fontolası tüm argümanlar görüntülenir -font.

Argümanları -annotate(işlenen metnin tuval kenarından ne kadar kaydırılacağı) yatay ve dikey piksel ofsetlerinden (sırasıyla) oluşur. İlk ofset (yatay x-shift) herhangi bir pozitif tamsayı olabilir, ancak birkaç pikselden büyük olması gerekmez. Ofset ikinci (dikey y-kaydırma) gerekir olması , en azından seçilmiş yazı (bağımsız değişken nokta boyutuna eşit -pointsize) ImageMagick yerleştirir, çünkü taban çizgisi ofsetini de yazı. Dolayısıyla, yazı tipini en az pointsizepiksel aşağı kaydırmazsanız , ilk satırın üstü kesilir.

En azından birkaç piksel geçmenizi öneriyorum, bu nedenle kullanıyorsanız -pointsize 64bunu böyle bir şeyle eşleştirmelisiniz -annotate +15+80. (Yatay ofseti daha büyük yazı tipi boyutlarıyla artırmak için bir neden yoktur, metin boyutlarıyla hiçbir ilişkisi yoktur.)

Çıktı görüntüsünün gerekli boyutlarını tahmin etmek de sıkıcı olabilir. Genellikle tam o ImageMagick en yararlanmak, aşırı değerleri almaya -trimve -bordersonuç kırpılmayabilir için. Aşağıdaki komut:

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 boyutunda bir kutuya dönüştürülür, ardından metnin her yerinde 10 piksellik bir kenarlık dışındaki fazla boşluk bırakılır. En +repagesonunda, çıkış PNG'sinin bir görüntü ofseti ile oluşturulmasını önler, aksi takdirde GIMP, ofseti uygulamak isteyip istemediğini soran yükte bir iletişim kutusu açar.

(Açıkçası, 1000x2000 küçük metin dosyaları için aşırıdır ve daha uzun olanlar için en azından dikey boyutun artırılması gerekebilir convert.

Ön İşleme Girişi

Metin dosyanız, oluşturmak için zaten gerektiği gibi biçimlendirilmemişse (örneğin, çok uzun satırlar kullanıyorsa), teslim etmeden önce yeniden biçimlendirmeniz gerekebilir convert. ImageMagick metni sarmaz, bu nedenle her metin satırı tam uzunluğunu yatay olarak uzatır. Neyse ki, dosyayı istediğiniz komut satırı biçimlendiricileriyle çalıştırmak, ardından işlenen metni convertdoğrudan dosyadan okumak yerine aktarmak mümkündür :

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

Bu ascii.txt, 24 çalışma DejaVu Sans Condensed içinde, komut tarafından işlendikten sonrafmt , varsayılan çalışma modunda 75 sözcük genişliğine kadar sözcük kaydırma ile girişini yeniden biçimlendirecek. (URL'ler gibi 75 karakterden uzun sürekli dizeler olmadıkça, bu durumda genişlerler.)

fmtMetni yeniden biçimlendirdikten sonra , doğrudan dosya okunuyormuş gibi convert, borulu fmtçıktıyı oluşturacak şekilde iletilir . (Dosya -adını belirtmek, "adlandırılmış disk dosyası yerine standart girdiden oku" için oldukça yaygın bir UNIX kabuğu kısayoludur ve ImageMagick'in araçları bu kurala uyar.)


1
Her annotateşeyin göründüğünden emin olmak için argümanın y bileşeni nokta boyutundan daha büyük olmalıdır: istenen boyut convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 123 -fill black \ -annotate +0+123 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.pngnerede 123. Ayrıca, convert -list fonthangi yazı tiplerinin desteklendiğini bulmak için de kullanabilirsiniz ( "FreeMono"evrensel olarak desteklenmez).
Alec Jacobson

1
Düzeltme: convert -list fontdoğru sözdizimidir, değil convert -list fonts.
Sopalajo de Arrierez

1
@CiroSantilli mm 改造 中心 法轮功 六四 事件 Hmm, güzel soru. IM7 yüklememde, /etc/ImageMagick-7/policy.txtbu dönüştürme formlarından herhangi birine müdahale eden bir politika ayarlanmamış . Dönüştürmeyi hangi politikanın engellediğini ve neden ayarlandığını biliyor musunuz? (Ayrıca, saplarda kavradığı: borulu mu fmt ...? Bir ihtimal Eğer öyleyse, sadece yerini alabilir tarafından komut işin şeklini fmtile catve aynı sonucu elde @ascii.txtsürümü.)
Ferd

1
Oh, bir soru daha var: "Çirkin meta veri içermeyen smokinle başarısız oldu ..." seçeneğini belirttiniz. Bu, @ garethTheRed'in formunu kullandığınızda ve konumlandırma komutlarını dosyaya eklediğinizde convert başarılı olduğu anlamına mı geliyor ? Oldukça olurdu tuhaf ki durum gibi geliyor bana, ben orada ne olacağını güvenlik kaygıları sorun dusunme yaşıyorum beri de uygulanmaz olacağını , içe aktarılan bir metin dosyasının içeriğine kapalı çalışırken. -drawascii.txt-annotate-draw
FeRD

1
Çirkin meta veriler nedeniyle Gareth'in cevabını bile denemedim, ama şimdi işe yaradı. Benim /etc/ImageMagick-6/policy.xmliçerir, <policy domain="path" rights="none" pattern="@*"/>bu yüzden tahmin ediyorum. stdin de işe yaramıyor, çünkü muhtemelen @-içinde desen var. Umutsuz için, "$(cat ascii.txt)"CLI uzunluğunu havaya uçurmuyorsa çalışır.
Ciro Santilli 事件 改造 :0 新疆 六四 事件
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.