如何利用python實(shí)現(xiàn)圖片轉(zhuǎn)化字符畫
前言:
字符畫:字符畫是一系列字符的組合,我們可以把字符看作是比較大塊的像素,一個(gè)字符能表現(xiàn)一種顏色,字符的種類越多,可以表現(xiàn)的顏色也越多,圖片也會(huì)更有層次感。
如果我們想要手工繪制出字符畫,首先要有扎實(shí)的美術(shù)基礎(chǔ),其次還要花費(fèi)大量的時(shí)間和精力。但是我們可以使用Python,只需要幾行代碼,就能夠?qū)⒁粡垐D片輕而易舉地轉(zhuǎn)化為一個(gè)字符畫。
實(shí)例1
效果圖:


理論很簡(jiǎn)單,就是對(duì)圖片操作,這里需要用到PIL的python包,里面有很好用的圖像處理功能。
先打開圖片,把圖像調(diào)整大小:
img = Image.open(picPath) img = img.resize((picW, picH))
然后讀取灰度值,再把灰度值和字符對(duì)應(yīng)起來就行。
from PIL import Image
lstChars = list("$@B%8&WM#*oahkbdpqwmZO0QLaCJUYXzczjhdhsdavunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.")
def oneChars(r, g, b, alpha = 256):
global lstChars
length = len(lstChars)
gray = int(0.2126 * r + 0.7152 * g + 0.722 * b)
index =length*gray
return lstChars[index]
picPath = "C:\Users\Administrator\Desktop\\aaaaa\\aa.png"
picH = 40
picW = 80
img = Image.open(picPath)
img = img.resize((picW, picH))
txt = ""
for y in range(picH):
for x in range(picW):
txt += oneChars(img.getpixel((x, y)))
txt += '\n'
print txt實(shí)例2
下面是源碼:
# -*- coding=utf-8 -*-
from PIL import Image
IMG = 'IMG.jpg' ?# 設(shè)置圖片文件
WIDTH = 150 ?# 設(shè)置字符畫的寬
HEIGHT = 80 ?# 設(shè)置字符畫的高
OUTPUT = 'T.txt' ?# 設(shè)置存放字符畫的文本文件
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") ?# 設(shè)置顯示的字符集
# 將256灰度映射到70個(gè)字符上
def get_char(r, g, b, alpha=256):
???# alpha為透明度
???# 判斷 alpha 值,為0表示全透明
???if alpha == 0:
???????return ' '
???# 獲取字符集的長(zhǎng)度,這里為 70
???length = len(ascii_char)
???# 將 RGB 值轉(zhuǎn)為灰度值 gray,灰度值范圍為 0-255
???gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
???# 灰度值范圍為 0-255,而字符集只有 70
???# 需要進(jìn)行如下處理才能將灰度值映射到指定的字符上
???# 防止當(dāng)灰度值為255時(shí),輸出的第70個(gè)字符超出列表索引,所以需要將(255+1)
???unit = (255.0 + 1) / length
???# 返回灰度值對(duì)應(yīng)的字符
???return ascii_char[int(gray / unit)]
if __name__ == '__main__':
???# 打開并調(diào)整圖片的寬和高
???im = Image.open(IMG)
???im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
???# 初始化輸出的字符串
???txt = ""
???# 遍歷圖片中的每一行
???for i in range(HEIGHT):
???????# 遍歷該行中的每一列
???????for j in range(WIDTH):
???????????# 將 (j,i) 坐標(biāo)的 RGB 像素轉(zhuǎn)為字符后添加到 txt 字符串
???????????txt += get_char(*im.getpixel((j, i)))
???????# 遍歷完一行后需要增加換行符
???????txt += '\n'
???# 輸出到屏幕
???print(txt)
???with open(OUTPUT, 'w') as f:
???????f.write(txt)直接粘貼即可,只需要在文件夾中導(dǎo)入一張圖片重命名為IMG.jpg。運(yùn)行結(jié)果會(huì)生成一個(gè)名為T.txt的文件。
原圖:

生成文件圖:

到此這篇關(guān)于如何利用python實(shí)現(xiàn)圖片轉(zhuǎn)化字符畫的文章就介紹到這了,更多相關(guān)python字符畫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python簡(jiǎn)單實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的實(shí)例項(xiàng)目
- python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的完整代碼
- Python 實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例(靜態(tài)圖片,gif皆可)
- Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的代碼實(shí)例
- Python將圖片轉(zhuǎn)換為字符畫的方法
- python Opencv將圖片轉(zhuǎn)為字符畫
- Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例
- Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例代碼
- 利用Python?實(shí)現(xiàn)圖片轉(zhuǎn)字符畫
相關(guān)文章
Python中request庫(kù)的各種用法詳細(xì)解析
本文詳細(xì)介紹了Python的requests庫(kù)的安裝與使用,包括HTTP請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求體的基本概念,以及發(fā)送GET和POST請(qǐng)求的基本用法,同時(shí),探討了會(huì)話對(duì)象、處理重定向、超時(shí)設(shè)置、代理支持等高級(jí)功能,幫助讀者更高效地處理復(fù)雜的HTTP請(qǐng)求場(chǎng)景,需要的朋友可以參考下2024-10-10
淺談Pycharm調(diào)用同級(jí)目錄下的py腳本bug
今天小編就為大家分享一篇淺談Pycharm調(diào)用同級(jí)目錄下的py腳本bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Matplotlib之解決plt.savefig()保存多張圖片有重疊的問題
這篇文章主要介紹了Matplotlib之解決plt.savefig()保存多張圖片有重疊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-09-09
使用虛擬環(huán)境實(shí)現(xiàn)Python版本和依賴庫(kù)的兼容
這篇文章主要介紹了使用虛擬環(huán)境實(shí)現(xiàn)Python版本和依賴庫(kù)的兼容的相關(guān)資料,需要的朋友可以參考下2022-12-12
Pandas:DataFrame對(duì)象的基礎(chǔ)操作方法
今天小編就為大家分享一篇Pandas:DataFrame對(duì)象的基礎(chǔ)操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
pip安裝指定版本的tensorflow的實(shí)現(xiàn)
本文介紹了如何使用pip安裝指定版本的TensorFlow,包括CPU版本和GPU版本的安裝方法,同時(shí),文中也提到了使用阿里國(guó)內(nèi)鏡像源加速下載的方法,以及在安裝GPU版本時(shí)需要檢查CUDA和cuDNN的兼容性的注意事項(xiàng),感興趣的可以了解一下2024-10-10

