程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

so easy,用 Python 實現圖片轉字符畫

編輯:Python

相信大家在網上經常看到有人秀出各種各樣的字符畫,對於這個五彩斑斓的世界來說,我們日常看到的都是一些高清的彩色的圖片,偶爾來個粗糙的黑白的字符畫,還是比較解乏的。喜歡記得收藏、關注、點贊。

注:文末提供技術交流群

字符畫的原理

這種字符畫的原理也比較簡單,我們可以把每個字符看成是一個大的像素,一個字符可以代表一種顏色,字符各類越多,可體現的顏色越多,字符畫就更有層次感。

灰度值和RGB

灰度值是指黑白圖像中點的顏色的深度,它的范圍是0-255,白色為255,黑色為0,其他顏色介於兩者之間。

RGB 是紅綠藍三顏色,通過不同的疊加可得到其他顏色。

要將圖片轉字符畫,需要先定義一個字符集,用來和灰度值做映射,將圖片每個像素的 RGB 值轉換為一個灰度值,將其對應的字符輸出就得到字符畫。

RGB 轉灰度值,有個轉換學公式,來源於網絡:

gray = (2126 * r + 7152 * g + 722 * b) / 10000

代碼實戰

我隨意選擇了一張圖片:

我的目標是轉化成下面這樣:

根據以上轉換原理,我們直接上代碼:

from PIL import Image
char = list('M3NB6Q#OC?7>!:–;. ')
def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
grey = (2126 * r + 7152 * g + 722 * b) / 10000
char_idx = int((grey / (alpha + 1.0)) * len(char))
return char[char_idx]
def write_file(out_file_name, content):
with open(out_file_name, 'w') as f:
f.write(content)
def main(file_name="input.jpg", width=100, height=80, out_file_name='output.txt'):
text = ''
im = Image.open(file_name)
im = im.resize((width, height), Image.NEAREST)
for i in range(height):
for j in range(width):
text += get_char(*im.getpixel((j, i)))
text += '\n'
print(text)
write_file(out_file_name, text)
if __name__ == '__main__':
main('dance.png')

程序的思路:

  • 定義一個字符數組,這個數組裡面的字符可以隨意寫。

  • 解析圖片,將圖片裡面的每個像素點解析成 RGB 值。

  • 根據我們上面的公式,將每個像素點轉換成字符數組裡面的一個字符。

  • 將所有像素點對應的字符拼接起來,就完成了轉換。

總結

圖片轉字符畫,轉換的原理和思路還是比較簡單的,實現也不復雜,大家可以動手試試看!

推薦文章

  • 李宏毅《機器學習》國語課程(2022)來了

  • 有人把吳恩達老師的機器學習和深度學習做成了中文版

  • 上瘾了,最近又給公司撸了一個可視化大屏(附源碼)

  • 如此優雅,4款 Python 自動數據分析神器真香啊

  • 梳理半月有余,精心准備了17張知識思維導圖,這次要講清統計學

  • 年終匯總:20份可視化大屏模板,直接套用真香(文末附源碼)

技術交流

歡迎轉載、收藏、有所收獲點贊支持一下!數據、代碼可以找我獲取

目前開通了技術交流群,群友已超過2000人,添加時最好的備注方式為:來源+興趣方向,方便找到志同道合的朋友

  • 方式①、發送如下圖片至微信,長按識別,後台回復:加群;
  • 方式②、添加微信號:dkl88191,備注:來自CSDN
  • 方式③、微信搜索公眾號:Python學習與數據挖掘,後台回復:加群


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved