تبدیل متن به ASCII با پایتون

زمان مطالعه: 5 دقیقه ویرایش: 1401/10/14

ASCCI art ها از باحال ترین و جالب ترین هنر های اینترنتی هستند،تصاویری که با متن ساخته شده اند.این تصاویر میتوانند نقاشی،شخصیت واقعی،میم،متن و... باشند.در این مطلب با کتابخانه PyFiglet این تصاویر جالب رو میسازیم.

 


نصب و استفاده :

ابتدا با کمک pip و دستور زیر کتابخانه را نصب کنید.

pip install pyfiglet

همچنین برای مرحله دوم و سوم (متن رنگی و تصویر) به این کتابخانه ها نیاز داریم :

pip install termcolor2

pip install pillow

حالا با استفاده از دستور زیر در اول کدهایمان این کتابخانه را فراخوانی میکنیم.

from pyfiglet import *

 


متن:

آسان ترین بخش کار تبدیل متن به ascii است.برای اینکار از این کد استفاده میکنیم.میتوانیم متن را مستقیم چاپ کنیم یا آن را به یک متغیر نسبت دهیم : :

print(figlet_format("hello world"))

text = figlet_format("hello world")

نتیجه به این صورت است:

حتی میتونیم فونت رو عوض کنیم که به این صورته :

print(figlet_format("hello world", font="slant"))

لیست فونت هارو در پایان مطلب قرار میدم

اما اگه بخواهیم متنو رنگی کنیم چی؟ از همون کتابخونه ای که بالاتر نصب کردیم استفاده میکنیم :

 

from termcolor import *

print(colored(figlet_format("hello world"),"green"))

که نتیجه این مدلیه :

 


ساخت ascii art با تصویر:

میخوایم این لوگوی پایتون رو با متن بسازیم :

حالا باید بریم سراغ فراخوانی سومین کتابخونمون:

from PIL.image import *

قبل از اضافه کردن عکس باید یه لیست از کاراکتر هایی که میخواهیم استفاده کنیم بسازیم :

chars = ["@", "J", "D", "%", "*", "P", "+", "Y", "$", ",", "."]

اولین مرحله خواندن تصویرمونه :

img_flag = True
img = "logo.jpg"
img = open(img)
img_flag = True

به همین سادگی ما یه عکس داریم که پایتون میتونه نمایشش بده.

بریم سراغ مرحله بعد. باید یه سری تنظیمات انجام بدیم که عکسمون مناسب تبدیل باشه (اول سایزش رو درست میکنیم و بعد خاکستریش میکنیم) :

width, height = img.size
aspect_ratio = height/width
new_width = 120
new_height = aspect_ratio * new_width * 0.55
img = img.resize((new_width, int(new_height)))


img = img.convert('L')

به همین راحتی عکسمون آماده تبدیله. اما چرا اینکار رو انجام دادیم ؟ تغییر سایز باعث بیشتر شدن اختلاف رنگ و در نتیجه دقیق تر شدن طرح میشه.

خاکستری بودن هم باعث میشه فیگلت بتونه تبدیلش کنه (چون به تنهایی از رنگ ها پشتیبانی نمیکنه)

برای تبدیلش اول از همه باید پیکسل به پیکسلش رو بررسی کنیم.و بعد در ازای هر پیکسل یکی از کاراکتر هایی که مشخص کردیم اضافه میشه :

pixels = img.getdata()
new_pixels = [chars[pixel//25] for pixel in pixels]
new_pixels = ''.join(new_pixels)

در اخر تبدیلش میکنیم :

new_pixels_count = len(new_pixels)
ascii_image = [new_pixels[index:index + new_width] for index in range(0, new_pixels_count, new_width)]
ascii = "\n".join(ascii_image)

در آخر پرینتش میکنیم :

 

print(ascii)

نتیجه نهایی اینجوری میشه (البته خیلی بزرگتر میشه ولی برای اینکه توی عکس مشخص باشه تو نوت پد کوچیکش کردم)

 

امیدوارم به کارتون بیاد و مفید باشه. هرجا به مشکلی خوردید و سوالی داشتید تو قسمت نظرات بپرسید تا جواب بدم.

  

لیست فونت ها :

slant / 3-d / 3x5 / 5lineoblique / alphabet / banner3-D / doh / isometric1 / letters / alligator / dotmatrix / bubble / bulbhead / digital



3
user نوشته شده توسط محمدصدرا عبدالعلی زاده من صدرام ! برنامه نویسی دوست دارم :) درباره پایتون، جنگو و... یه چیزایی بلدم ;)


دیدگاه


برای ثبت دیدگاه، وارد شوید



خوب بود صدرا

user Ilia Noori - 1401/09/16 17:01

شما تمام فونت هارو نگفته اید. مثلا فونت mini هم هست


محمدصدرا عبدالعلی زاده: ممنون از دیدگاهتون :) سعی میشه دفعه بعد کامل تر باشه