文/IT可達鴨
圖/IT可達鴨、網絡
前言
一段來自網絡的話:
打工? 這輩子都不可能打工的。 做生意又不會做、 只能靠偷電瓶車維持這種生活!
據說,發表該言論的“網紅”最近刑滿出獄,各大網紅公司“三顧茅廬”請他出山.....
為何會盛行這種不好的風氣?作為一名碼農,給大夥分享一段代碼,給他打個碼。
這次分享一個圖片轉字符畫的一個源碼,需要有圖像的一些基本知識。
- 環境配置
python版本: 3.6.0
代碼編輯工具:pycharm
文本編輯工具:Notepad++
項目所需要的環境安裝包
<code>pip install pillow/<code>
第一步:導入相關的python包
<code># encoding:utf-8 from PIL import Image # 全局變量 ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ")/<code>
導入PIL包,Python Imaging Library,是Python平臺的圖像處理標準庫。PIL功能非常強大,API也非常簡單易用。
定義一個全局變量 ascii_chat, 因為後面代碼會不斷使用這個變量,所以把它定義為全局變量,方便調用。我們的字符畫所使用到的字符集,一共有 70 個字符,字符的種類與數量可以自己根據字符畫的效果反覆調試,
第二步:灰度映射
<code>def get_char(gray_pix, alpha = 256): """將256灰度映射到指定字符上""" if alpha == 0: return ' ' length = len(ascii_char) return ascii_char[int(gray_pix/((256.0 + 1)/length))]/<code>
灰度值:指黑白圖像中點的顏色深度,範圍一般從0到255,白色為255,黑色為0,故黑白圖片也稱灰度圖像
我們可以使用灰度值公式將像素的 RGB 值映射到灰度值:
gray = 0.2126 * r + 0.7152 * g + 0.0722 * b
再利用一個不重複的字符列表,灰度值小(暗)的用列表開頭的符號(在上定義的一個全局變量),灰度值大(亮)的用列表末尾的符號。
第三步:圖片轉化
<code>def transform(img_path): """對圖片進行處理""" img = Image.open(img_path) gray_img = img.convert('L') width, height = img.size # 將圖片進行縮放,使得最終結果更容易查看 rate = round(300.0 / width, 3) rate2 = round(110.0 / width, 3) width, height = int(width * rate), int(height * rate2) gray_img = gray_img.resize((width, height), Image.ANTIALIAS) # 獲取每個像素點對應的字符 code_pic = '' for i in range(height): for j in range(width): code_pic += get_char(gray_img.getpixel((j, i))) code_pic += '\r\n' return code_pi/<code>
img.convert('L'), 就是把RGB彩色圖片轉為灰度圖片(利用上面的灰度公式)。為了展示方便,這裡把圖片進行縮放,縮放比例為 rate。
通過雙重循環對每個像素點值進行轉化,轉化為指定的字符。
第四步: 保存結果
<code>def save_txt(filename, content): """保存txt""" with open(filename, 'w', encoding='utf-8') as wf: wf.write(content)/<code>
這是保存txt文本的寫法,是不是很簡潔。利用with關鍵詞,省去了close()函數的調用,使得代碼更加精簡。
第五步: 主函數
<code>if __name__ == '__main__': img_path = 'timg.jpg' txt_path = 'time.txt' code_pic = transform(img_path) save_txt(txt_path, code_pic) print(code_pic)/<code>
輸入輸出
結語:
其實,整個源碼看下來,沒有難度,可以說非常簡單。是的,有難度的代碼,其實都是由一塊又一塊簡單的代碼構成。老老實實敲代碼,還是不要跟風學習負面網紅,生活應該來點正能量。
如果有疑問想獲取源碼,可以關注後,在後臺私信我,回覆:python代碼圖片。 我把源碼發你。持續關注"IT可達鴨" ,每天分享有趣Python源碼。最後,感謝大家的閱讀,祝大家工作生活愉快!