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
برای ثبت دیدگاه، وارد شوید
شما تمام فونت هارو نگفته اید. مثلا فونت mini هم هست
خوب بود صدرا