Herkese Merhaba,
www.figlet.org sitesindeki yazıtiplerini kullanacak şekilde yeni kod yazdım.
kodları hem aşağıda hem de GitHub adresimde paylaşıyorum.
Kodları, 10 yazıtipi üzerinde denedim ve istediğim sonucu elde ettim. (“standard” isimli yazıtipi dosyasında, bazı satırlara elle müdahale edip silmem gerekti. kullandığım yazıtipi dosyalarını da GitHub adresimde “fonts” klasöründe bulabilirsiniz.)
Acemi bir python kullanıcısı olduğum için, kodlarda geliştirmem/düzeltmem gereken yerler olacağının bilincindeyim.
Kodları denemek, ya da incelemek isteyenler için aşağıya ekliyorum.
İlgili konuya ait GitHub adresi: GitHub - mhalil/dijital_metin: http://www.figlet.org/ adresinde paylaşılan yazıtipi dosyalarını kullanarak benzer çıktılar üreten python kodu.
# Yazıtipi İsimlerini Gösteren Bir Seçim Menüsü oluşturuldu.
print("""
Kullanılabilir Yazıtipleri;
**************************
1. Banner3 6. Isometric2
2. Colossal 7. Isometric3
3. Doh 8. Isometric4
4. Epic 9. Standard
5. Isometric1 10. Univers
Q. ÇIKIŞ
""")
def ky(): # Yazıtipini oluşturan karakterlerin yuksekligi (her karakterin kaç satırdan oluştuğunu) hesaplayan fonksiyon.
yukseklik = 0 # Karakter Yüksekliği (satır sayısı)
with open (yazitipi_yolu , "r", encoding="utf-8") as dosya:
liste = dosya.readlines() # Yazıtipi dosyasını oku, Listele.
for oge in liste: # harf yüksekliği hesaplanıyor.
if (oge[-3:] == "@@\n"): # ekseriyetle satır sonları @ ile, karakter sonları (sınırları) @@ ile bitiriliyor. Zaman zaman @ yerine # kullanıldığı da oluyor.
break # harf yüksekliğinin sınırı ile karşılaşınca işlemi durdur.
elif ((oge[-2:] == "@\n") or (oge[-3:] == "$@\n") or (oge == "\x7f\x7f\x7f\x7f\x7f@\n")): # satırın tamamına, son 2 ve 3 karakterilerine bakarak karakter yüksekliği sonlanmış mı? kontrol et.
yukseklik += 1 # karakter yüksekliği sonlanmamışsa (sınırlanmamışsa) yükseklik değerini bir artır.
return (yukseklik+1) # Yazıtipinin karakter yüksekliğini fonksiyona değer olarak ata.
def listele(): # Belirtilen yazitipi dosyasındaki "@\n" ve "@@\n" karakterlerini silerek liste oluştur.
alfabe_kodlari = list()
with open (yazitipi_yolu , "r", encoding="utf-8") as dosya:
liste = dosya.readlines()
for i in liste:
if (i[-2:] != "@\n"):
if ( (i[-2:] == "#\n") and (i[-3:] != "##\n")): # sonu @ ile bitmeyen karakterlerde ekseriyetle @ yerine # kullanılıyor. "doh" yazitipinde @ işareti, aynı karakterden oluşturulduğu için bitiş parametresi # ile belirtilmiş.
alfabe_kodlari.append(i[:-2])
elif (i[-3:] == "##\n"):
alfabe_kodlari.append(i[:-3])
else:
if ( (i[-2:] == "@\n") and (i[-3:] != "@@\n")):
alfabe_kodlari.append(i[:-2])
elif (i[-3:] == "@@\n"):
alfabe_kodlari.append(i[:-3])
return alfabe_kodlari # Alfabeyi oluşturan kodlara ait listeyi, fonksiyona değer olarak ata.
def alfabe_sozluk():
karakterler = """ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÖÜâöüβ""" # Yazıtipi dosyalarında bulunan sıralı karakter bilgisi.
karakterler_standard = """ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÖÜâöüβ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſˇ˘˙˛˝""" # "STANDARD" isimli Yazıtipi dosyasında bulunan sıralı karakter bilgisi.
krt_yuk = ky() # Karakter YÜksekliği değerini ky() fonksiyonun çalıştırarak hesapla ve krt_yuk değişkenine ata.
alfabe_kod = listele() # Alfabeye ait kodları listele() fonksiyonun çalıştırarak hesapla ve alfabe_kod değişkenine ata.
alfabe_key = list() # alfabe_key isimi boş bir liste oluştur.
alfabe = dict() # alfabe isimi boş bir sözlük yapısı oluştur.
if secim == "9":
for k in karakterler_standard: # Karakterlere sayı numarası eklenip alfabe_key listesine kaydeden döngü yapısı.
for l in range(1,krt_yuk+1): # Sayılar 1'den başlayarak karakter (satır) yüksekliğine kadar devam edecek.
alfabe_key.append(k+str(l)) # listeye ekle. Ör: A1, A2, A3, ..., z1, z2, z3...vb
else:
for k in karakterler: # Karakterlere sayı numarası eklenip alfabe_key listesine kaydeden döngü yapısı.
for l in range(1,krt_yuk+1): # Sayılar 1'den başlayarak karakter (satır) yüksekliğine kadar devam edecek.
alfabe_key.append(k+str(l)) # listeye ekle. Ör: A1, A2, A3, ..., z1, z2, z3...vb
for i in range(len(alfabe_kod)): # alfabe_kod listesindeki öğeleri, alfabe_key listesindek öğelerle sırasına uygun olarak eşleştirip alfabe isimli sözlüğe ekleyen döngü yapısı. Ör: {'a1' : '## # #' }
alfabe[alfabe_key[i]] = alfabe_kod[i]
return alfabe # Oluşturulan alfabe isimli sözlüğü fonksiyona değer olarak ata.
def sonuc(): # Kullanıcıdan Yazitipi menüsünden seçim yapmasını ve bir metin yazmasını isteyen; Yazılan metni, seçilen yazıtipi kodlarına çevirerek ekrana yazdıran fonksiyon.
yuk = ky() # ky() fonksiyonunu çalıştırarak, karakter (satır) yüksekliğini hesaplaya ve yuk isimli değişkene ata.
sozluk = alfabe_sozluk() # alfabe_sozluk() fonksiyonunu çalıştır ve sozluk isimli değişkene ata.
girdi = input("Metni yazın: ") # Kullanıcıdan bir metin girmesini iste.
sonuc = "" # sonuc isimli boş bir string oluştur.
if secim != "9": # "standard" isimli yazıtiplerinde daha az sayıda karakter var, eğer o yazıtipleri seçilirse Türkçe karakterler yerine diğer karakterleri kullan.
turkce_karakterler = {"ç" : "c", "Ç" : "C", "ğ" : "g", "Ğ" : "G", "ı" : "i", "İ" : "I", "ş" : "s", "Ş" : "S"} # hangi harfe yerine hangi hrf kullanılacak, onu belirle.
for i in range(1, yuk+1): # Kullanıcının yazdığı metni sozluk yapısından sorgulayarak her karaktere karşılık gelen kodları sonuc isimli stringe ekleyen döngü yapısı.
for harf in girdi:
if harf in turkce_karakterler.keys(): # Girdi içerisinde Türkçe karakter varsa, kod hata vermesin alfabede ona yakın karakteri kullansın. Ör: ş yerine s, Ğ yerine G, ...vb
harf = turkce_karakterler[harf]
sonuc += sozluk[harf + str(i)] + " "
sonuc += "\n"
else: # "standart" isimli yazıtipi içerisinden 331 karakter var. Bu durumda, girdide yazılan kelimeleri olduğu gibi (karakterleri değiştirmeden) kullan.
for i in range(1, yuk+1): # Kullanıcının yazdığı metni sozluk yapısından sorgulayarak her karaktere karşılık gelen kodları sonuc isimli stringe ekleyen döngü yapısı.
for harf in girdi:
sonuc += sozluk[harf + str(i)] + " "
sonuc += "\n"
print(sonuc.replace("$", " ")) # sonuc isimli stringdeki (karakter sonlarındaki) $ karakterini silerek sonucu ekrna yazdır.
# print(yazitipi_sec.keys())
while True:
secim = input("Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: ") # Kullanıcıdan Menü seçeneklerinden birini seçmesi isteniyor.
yazitipi_sec = {"1" : "banner3", "2" : "colossal" , "3" : "doh" ,"4" : "epic" , "5" : "isometric1", "6" : "isometric2", "7" : "isometric3" , "8" : "isometric4" , "9" : "standard", "10" : "univers"} # Seçime karşılık gelen yazıtipini sözlük ile belirle.
if secim == "Q" or secim == "q":
print(".:: PROGRAM SONLANDI ! ::.")
break
elif secim not in yazitipi_sec.keys():
print("Geçerli bir seçim yapmalısınız!")
else:
yazitipi = yazitipi_sec[secim] # Seçilen yazıtipinin adı.
yazitipi_yolu = "fonts/" + yazitipi + ".flf" # Yazıtipinin tam yolu.
sonuc() # sonuc() fonksiyonunu çalıştır.
ÖRNEK ÇIKTILAR:
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 1
Metni yazın: YazBel
## ## ### ######## ######## ######## ##
## ## ## ## ## ## ## ## ##
#### ## ## ## ## ## ## ##
## ## ## ## ######## ###### ##
## ######### ## ## ## ## ##
## ## ## ## ## ## ## ##
## ## ## ######## ######## ######## ########
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 2
Metni yazın: YazBel
Y88b d88P 888888b. 888
Y88b d88P 888 "88b 888
Y88o88P 888 .88P 888
Y888P 8888b. 88888888 8888888K. .d88b. 888
888 "88b d88P 888 "Y88b d8P Y8b 888
888 .d888888 d88P 888 888 88888888 888
888 888 888 d88P 888 d88P Y8b. 888
888 "Y888888 88888888 8888888P" "Y8888 888
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 3
Metni yazın: YazBel
YYYYYYY YYYYYYY BBBBBBBBBBBBBBBBB lllllll
Y:::::Y Y:::::Y B::::::::::::::::B l:::::l
Y:::::Y Y:::::Y B::::::BBBBBB:::::B l:::::l
Y::::::Y Y::::::Y BB:::::B B:::::B l:::::l
YYY:::::Y Y:::::YYY aaaaaaaaaaaaa zzzzzzzzzzzzzzzzz B::::B B:::::B eeeeeeeeeeee l::::l
Y:::::Y Y:::::Y a::::::::::::a z:::::::::::::::z B::::B B:::::B ee::::::::::::ee l::::l
Y:::::Y:::::Y aaaaaaaaa:::::a z::::::::::::::z B::::BBBBBB:::::B e::::::eeeee:::::ee l::::l
Y:::::::::Y a::::a zzzzzzzz::::::z B:::::::::::::BB e::::::e e:::::e l::::l
Y:::::::Y aaaaaaa:::::a z::::::z B::::BBBBBB:::::B e:::::::eeeee::::::e l::::l
Y:::::Y aa::::::::::::a z::::::z B::::B B:::::B e:::::::::::::::::e l::::l
Y:::::Y a::::aaaa::::::a z::::::z B::::B B:::::B e::::::eeeeeeeeeee l::::l
Y:::::Y a::::a a:::::a z::::::z B::::B B:::::B e:::::::e l::::l
Y:::::Y a::::a a:::::a z::::::zzzzzzzz BB:::::BBBBBB::::::B e::::::::e l::::::l
YYYY:::::YYYY a:::::aaaa::::::a z::::::::::::::z B:::::::::::::::::B e::::::::eeeeeeee l::::::l
Y:::::::::::Y a::::::::::aa:::a z:::::::::::::::z B::::::::::::::::B ee:::::::::::::e l::::::l
YYYYYYYYYYYYY aaaaaaaaaa aaaa zzzzzzzzzzzzzzzzz BBBBBBBBBBBBBBBBB eeeeeeeeeeeeee llllllll
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 4
Metni yazın: YazBel
_______ _______ ______ _______ _
|\ /| ( ___ ) / ___ ) ( ___ \ ( ____ \ ( \
( \ / ) | ( ) | \/ ) | | ( ) ) | ( \/ | (
\ (_) / | (___) | / ) | (__/ / | (__ | |
\ / | ___ | / / | __ ( | __) | |
) ( | ( ) | / / | ( \ \ | ( | |
| | | ) ( | / (_/\ | )___) ) | (____/\ | (____/\
\_/ |/ \| (_______/ |/ \___/ (_______/ (_______/
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 5
Metni yazın: YazBel
___ ___ ___ ___ ___ ___
|\__\ /\ \ /\ \ /\ \ /\ \ /\__\
|:| | /::\ \ \:\ \ /::\ \ /::\ \ /:/ /
|:| | /:/\:\ \ \:\ \ /:/\:\ \ /:/\:\ \ /:/ /
|:|__|__ /::\~\:\ \ \:\ \ /::\~\:\__\ /::\~\:\ \ /:/ /
/::::\__\ /:/\:\ \:\__\ _______\:\__\ /:/\:\ \:|__| /:/\:\ \:\__\ /:/__/
/:/~~/~ \/__\:\/:/ / \::::::::/__/ \:\~\:\/:/ / \:\~\:\ \/__/ \:\ \
/:/ / \::/ / \:\~~\~~ \:\ \::/ / \:\ \:\__\ \:\ \
\/__/ /:/ / \:\ \ \:\/:/ / \:\ \/__/ \:\ \
/:/ / \:\__\ \::/__/ \:\__\ \:\__\
\/__/ \/__/ ~~ \/__/ \/__/
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 6
Metni yazın: YazBel
___ ___ ___
/\ \ /\__\ _____ /\__\
___ /::\ \ /::| | /::\ \ /:/ _/_
/| | /:/\:\ \ /:/:| | /:/\:\ \ /:/ /\__\
|:| | /:/ /::\ \ /:/|:| |__ /:/ /::\__\ /:/ /:/ _/_ ___ ___
|:| | /:/_/:/\:\__\ /:/ |:| /\__\ /:/_/:/\:|__| /:/_/:/ /\__\ /\ \ /\__\
__|:|__| \:\/:/ \/__/ \/__|:|/:/ / \:\/:/ /:/ / \:\/:/ /:/ / \:\ \ /:/ /
/::::\ \ \::/__/ |:/:/ / \::/_/:/ / \::/_/:/ / \:\ /:/ /
~~~~\:\ \ \:\ \ |::/ / \:\/:/ / \:\/:/ / \:\/:/ /
\:\__\ \:\__\ |:/ / \::/ / \::/ / \::/ /
\/__/ \/__/ |/__/ \/__/ \/__/ \/__/
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 7
Metni yazın: YazBel
___ ___ ___
___ / /\ / /\ _____ / /\
/__/| / /::\ / /::| / /::\ / /:/_
| |:| / /:/\:\ / /:/:| / /:/\:\ / /:/ /\ ___ ___
| |:| / /:/~/::\ / /:/|:|__ / /:/~/::\ / /:/ /:/_ /__/\ / /\
__|__|:| /__/:/ /:/\:\ /__/:/ |:| /\ /__/:/ /:/\:| /__/:/ /:/ /\ \ \:\ / /:/
/__/::::\ \ \:\/:/__\/ \__\/ |:|/:/ \ \:\/:/~/:/ \ \:\/:/ /:/ \ \:\ /:/
~\~~\:\ \ \::/ | |:/:/ \ \::/ /:/ \ \::/ /:/ \ \:\/:/
\ \:\ \ \:\ | |::/ \ \:\/:/ \ \:\/:/ \ \::/
\__\/ \ \:\ | |:/ \ \::/ \ \::/ \__\/
\__\/ |__|/ \__\/ \__\/
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 8
Metni yazın: YazBel
___ ___ ___ ___ ___
__ / /\ /__/\ / /\ / /\ / /\
| |\ / /::\ \ \:\ / /::\ / /::\ / /:/
| |:| / /:/\:\ \ \:\ / /:/\:\ / /:/\:\ / /:/
| |:| / /::\ \:\ \ \:\ / /::\ \:\ / /::\ \:\ / /:/
|__|:|__ /__/:/\:\_\:\ ______\__\:\ /__/:/\:\_\:| /__/:/\:\ \:\ /__/:/
/ /::::\ \__\/ \:\/:/ \ \::::::::/ \ \:\ \:\/:/ \ \:\ \:\_\/ \ \:\
/ /:/~~~~ \__\::/ \ \:\~~~~~ \ \:\_\::/ \ \:\ \:\ \ \:\
/__/:/ / /:/ \ \:\ \ \:\/:/ \ \:\_\/ \ \:\
\__\/ /__/:/ \ \:\ \__\::/ \ \:\ \ \:\
\__\/ \__\/ ~~ \__\/ \__\/
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 9
Metni yazın: YazBel
__ __ ____ _
\ \ / / __ _ ____ | __ ) ___ | |
\ V / / _` | |_ / | _ \ / _ \ | |
| | | (_| | / / | |_) | | __/ | |
|_| \__,_| /___| |____/ \___| |_|
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 10
Metni yazın: YazBel
8b d8 88888888ba 88
Y8, ,8P 88 "8b 88
Y8, ,8P 88 ,8P 88
"8aa8" ,adPPYYba, 888888888 88aaaaaa8P' ,adPPYba, 88
`88' "" `Y8 a8P" 88""""""8b, a8P_____88 88
88 ,adPPPPP88 ,d8P' 88 `8b 8PP""""""" 88
88 88, ,88 ,d8" 88 a8P "8b, ,aa 88
88 `"8bbdP"Y8 888888888 88888888P" `"Ybbd8"' 88