如何利用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)文章
numpy數(shù)組合并和矩陣拼接的實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)組合并和矩陣拼接的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03使用python實(shí)現(xiàn)數(shù)組、鏈表、隊(duì)列、棧的方法
數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。這篇文章主要介紹了使用python實(shí)現(xiàn)數(shù)組、鏈表、隊(duì)列、棧的相關(guān)知識(shí),需要的朋友可以參考下2019-12-12python markdown轉(zhuǎn)html自定義實(shí)現(xiàn)工具解析
Python-Markdown2 是一個(gè) Python 庫(kù),用于將 Markdown 文本轉(zhuǎn)換為 HTML,它是對(duì)標(biāo)準(zhǔn) Markdown 語(yǔ)法的擴(kuò)展,提供了一些額外的功能和選項(xiàng),同時(shí)還兼容標(biāo)準(zhǔn) Markdown,用它可以方便地生成漂亮的文檔、博客文章、項(xiàng)目文檔等2024-01-01如何用python?GUI(tkinter)寫一個(gè)鬧鈴小程序(思路詳解)
這篇文章主要介紹了用python?GUI(tkinter)寫一個(gè)鬧鈴小程序思路詳解,涉及到tkinter一些函數(shù)控件,數(shù)據(jù)的類的封裝,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12python操作小程序云數(shù)據(jù)庫(kù)實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能
這篇文章主要介紹了python操作小程序云數(shù)據(jù)庫(kù)實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Pytorch中使用ImageFolder讀取數(shù)據(jù)集時(shí)忽略特定文件
這篇文章主要介紹了Pytorch中使用ImageFolder讀取數(shù)據(jù)集時(shí)忽略特定文件,具有一的參考價(jià)值需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-03-03