婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python簡單實現圖片轉字符畫的實例項目

Python簡單實現圖片轉字符畫的實例項目

熱門標簽:地圖制圖標注位置改變是移位嗎 上海機器人外呼系統哪家好 315電話機器人廣告 浙江電銷卡外呼系統好用嗎 地圖標注微信發送位置不顯示 地圖標注的意義點 蓋州市地圖標注 房產電銷外呼系統 南京銷售外呼系統軟件

1. 原理

利用 PIL 庫來獲取圖片并修改大小,
利用灰度值轉換公式把每一個像素的 RGB 值轉為灰度值

gray = int(0.2126*r+0.7152*g+0.0722*b)

再從字符集里獲取對應的字符

asciis = list('M%$@#WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*>_~-,. ')

最后將字符連接起來并保存就完成了

2. 開始制作

2.1 導入所需的庫

在這個工程中,我們需要的第三方庫是 PIL
但我們不用 pip install PIL 來安裝它,而是使用 pip install pillow

pip install pillow

導入庫
在導入 PIL 庫時,不能用 import pillow,應使用 import PIL

from PIL import Image as Image

2.2 獲取圖片路徑和選項

inputfile = input('inputfile:')
outputfile = input('outputfile:')
distance = {'y':' ','':' ','n':''}
distance = distance[input('distance?(Y/n):')]
re = input("resize?:")

字母占用的位置是矩形的,因此生成出來的字符畫會被“擠壓”。我們可以在字母與字母之間添加空格來防止這種情況的發生。
如果圖片太大了,會導致耗費時間過長、亂碼等問題。我們應該對圖片進行必要的縮放。在詢問“resize?”時,可以設置以下幾種回答:

回答方式 作用
“”,啥也不輸入 不縮放
“100”,邊長 輸入單個數字時,會按比例縮放為較長邊為此長度的矩形
“100,200”,寬和高 縮放為指定寬高的矩形

2.3 圖片獲取

使用 PILopen 函數打開圖片

image = Image.open(inputfile)

注意:這里的 open 函數不要和 python 內置函數 open 混淆

2.4 調整圖片大小

獲取圖片大小

w, h = image.size

獲取變量 re 中存儲的大小信息,并用函數 split 分割

nwh = re.split(',')
for i in range(len(nwh)):
    nwh[i] = int(nwh[i])

調整圖片大小

if len(nwh) == 1:
    #如果項數為1,表示用戶只輸入了一個數字。即按比例縮放為較長邊為此長度的矩形
    ww = int(nwh[0] / max(w,h) * w) #max函數獲取較大值
    hh = int(nwh[0] / max(w,h) * h)
    image = image.resize((ww,hh),Image.ANTIALIAS) 
    #改變圖片大小
    #第一個參數放入一個元組,指定寬高
    #第二個參數 Image.ANTIALIAS 表示獲取高質量圖片
else:
    #項數不為1,縮放為指定寬高的矩形
    image = image.resize((nwh[0],nwh[1]),Image.ANTIALIAS)

2.5 轉換字符

指定轉換的字符集

asciis = list('M%$@#WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*>_~-,. ')
#list函數將字符串轉換為列表

定義轉換字符的函數

def getasc(r,g,b,t=100): #t為透明度
    if t == 0:
        return(' ') #如果是透明的,則直接返回空值
    else:
        asc = ''
        gray = int(0.2126*r+0.7152*g+0.0722*b) #轉灰度值
        asc = asciis[int(len(asciis)/256*(gray))] #獲取字符
        return(asc)

開始轉換字符

for i in range(h):
    for o in range(w): #按行讀取每一個像素的RGB值
        p = image.getpixel((o,i))
        g = getasc(*p) # * 將參數列表轉換為多個項
        txt = txt + g + distance #連接字符
    txt = txt + '\n' #換行

函數 getpixel 獲取指定位置的 RGB 值,它的第一個參數為元組,傳入像素位置 (x,y),如果圖片是 JPG 格式的,它會返回含三項的列表 [r,g,b],如果圖片是 PNG 格式的,它會返回含四項的列表 [r,g,b,t]t 是透明度

2.6 保存文本

使用 python 內置函數 open 保存文件

with open(outputfile,'w') as f: # 'w' 表示寫入
    f.write(txt)

2.7 效果

================== RESTART: D:\Python38-32\Files\ji2a\ji2a.py ==================
=====image to ascii=====
inputfile:
dora.png
outputfile:
dora.txt
distance?(Y/n):
y
resize?(needn't:'', square:side length, restangle:width,height):
100

Opening 'dora.png'...
Getting...
Saving...
Seccessfully

原圖:


結果:

3. 完整代碼

from PIL import Image as Image
  
asciis = list('M%$@#WNBRwm8S5A4E3KXFPH69nsxeazgpqbdoctfhkyvuGZYVTUCI2QOD0L7Jjl1ri!^{}[]()/|;:*>_~-,. ')
#gray = int(0.2126*r+0.7152*g+0.0722*b)

def main():
    global asciis

    print('=====image to ascii=====')
    
    inputfile, outputfile, distance, re = getargs()

    image = openfile(inputfile)

    image = resize(image,re)
    w, h = image.size

    txt = gettxt(image,w,h,distance)

    savefile(outputfile,txt)

    print('Seccessfully')

def getargs():
    inputfile = input('inputfile:\n')
    outputfile = input('outputfile:\n')
    distance = {'':' ','y':' ','n':''}
    distance = distance[input('distance?(Y/n):\n')]
    re = input("resize?(needn't:'', square:side length, restangle:width,height):\n")

    return(inputfile,outputfile,distance,re)

def openfile(inputfile):
    print("\nOpening '"+inputfile+"'...")
    image = Image.open(inputfile)

    return(image)

def resize(image,re):
    if re != '':
        print('Resizing...')
        nwh = re.split(',')
        for i in range(len(nwh)):nwh[i]=int(nwh[i])
        w, h = image.size
        
        if len(nwh) == 1:
            ww = int(nwh[0] / max(w,h) * w)
            hh = int(nwh[0] / max(w,h) * h)
            image = image.resize((ww,hh),Image.ANTIALIAS)
        else:
            image = image.resize((nwh[0],nwh[1]),Image.ANTIALIAS)
        
    return(image)

def gettxt(image,w,h,distance):    
    txt = ''
    print('Getting...')

    for i in range(h):
        for o in range(w):
            p = image.getpixel((o,i))
            txt = txt + getasc(*p) + distance
        txt = txt + '\n'

    return(txt)
    
    
def getasc(r,g,b,t=100):
    if t == 0:
        return(' ')
    else:
        asc = ''
        gray = int(0.2126*r+0.7152*g+0.0722*b)
        asc = asciis[int(len(asciis)/256*(gray))]
        return(asc)

def savefile(outputfile,txt):
    print('Saving...')
    
    with open(outputfile,'w') as f:
        f.write(txt)

    return()

if __name__ == '__main__':
    main()

此代碼在 Python3.8 下調試通過

4. 后記

我們的圖片轉字符畫程序完成了!

要想將它打造成一個真正的命令行工具,可以加入命令行參數功能,
利用 sys 模塊的 argv 函數獲取命令行參數,
利用 getopt 模塊的 getop 函數解析命令行參數。

到此這篇關于Python簡單實現圖片轉字符畫的實例項目的文章就介紹到這了,更多相關Python 圖片轉字符畫內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python實現圖片轉字符畫的完整代碼
  • python實現圖片轉字符畫
  • Python 實現圖片轉字符畫的示例(靜態圖片,gif皆可)
  • 基于python實現圖片轉字符畫代碼實例
  • Python實現圖片轉字符畫的代碼實例
  • 一百行python代碼將圖片轉成字符畫
  • Python將圖片轉換為字符畫的方法
  • python Opencv將圖片轉為字符畫
  • Python實現圖片轉字符畫的示例
  • Python實現圖片轉字符畫的示例代碼
  • 從零學python系列之教你如何根據圖片生成字符畫

標簽:金華 貴州 赤峰 陽泉 日照 雙鴨山 臨汾 克拉瑪依

巨人網絡通訊聲明:本文標題《Python簡單實現圖片轉字符畫的實例項目》,本文關鍵詞  Python,簡單,實現,圖片,轉,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python簡單實現圖片轉字符畫的實例項目》相關的同類信息!
  • 本頁收集關于Python簡單實現圖片轉字符畫的實例項目的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美精品乱码久久久久久| 7777精品久久久大香线蕉| 国产v综合v亚洲欧| 欧美日韩一级视频| 久久午夜色播影院免费高清 | 久久青草欧美一区二区三区| 亚洲欧美日韩国产成人精品影院| 国产精品视频一二三区| 久久国产人妖系列| 在线亚洲欧美专区二区| 中文成人综合网| 韩日精品视频一区| 欧美精品在线一区二区三区| 一区二区三区精品久久久| 国产91色综合久久免费分享| 久久影院视频免费| 人妖欧美一区二区| 欧美日本在线播放| 视频一区视频二区中文| 91精品国产综合久久香蕉麻豆| 亚洲影院久久精品| 7777精品伊人久久久大香线蕉超级流畅| 一区二区三区四区蜜桃| 色综合咪咪久久| 亚洲欧美二区三区| 欧美午夜不卡视频| 性久久久久久久久| 91蜜桃网址入口| 精品国产免费久久| 国产成人av资源| 欧美va亚洲va| 成人在线综合网站| ㊣最新国产の精品bt伙计久久| 成人免费福利片| 亚洲欧洲国产专区| 欧美无砖专区一中文字| 日韩电影在线一区二区三区| 色网综合在线观看| 亚洲第一成年网| 欧美一区二区三区电影| 日日夜夜免费精品| 欧美videos中文字幕| 国产69精品久久久久毛片 | 一色桃子久久精品亚洲| 日韩免费视频线观看| 欧美综合色免费| 97精品视频在线观看自产线路二| 激情五月婷婷综合网| 奇米色一区二区| 偷窥少妇高潮呻吟av久久免费| 亚洲人成伊人成综合网小说| 中文一区一区三区高中清不卡| 日韩欧美国产三级| 欧美一区二区三区的| 欧美日韩高清一区二区三区| 一本高清dvd不卡在线观看| 成人久久视频在线观看| 国产精品一区二区在线观看网站| 麻豆专区一区二区三区四区五区| 亚洲国产精品综合小说图片区| 亚洲精品综合在线| 日韩一区在线看| 亚洲欧美日韩一区二区三区在线观看| 国产精品成人免费在线| 国产女人18毛片水真多成人如厕| 欧美成人a视频| 久久综合久色欧美综合狠狠| 久久综合狠狠综合久久激情 | 国产精品美女一区二区三区| 2019国产精品| 国产精品久久久久久久午夜片| 久久久久久一二三区| 久久久久亚洲综合| 中文字幕二三区不卡| 亚洲欧洲日韩一区二区三区| 亚洲欧美一区二区三区极速播放 | 国产曰批免费观看久久久| 黄色日韩网站视频| 高清shemale亚洲人妖| 成人看片黄a免费看在线| 99精品视频在线免费观看| 91丨九色丨尤物| 欧美日韩亚洲综合| 亚洲精品一区二区三区99 | 精品91自产拍在线观看一区| 欧美一二三区精品| 久久婷婷久久一区二区三区| 国产精品传媒入口麻豆| 亚洲一区二区三区四区在线免费观看| 亚洲成人自拍偷拍| 国产一区二区中文字幕| 色94色欧美sute亚洲线路一久 | a在线欧美一区| 久久电影网电视剧免费观看| 国产一区二区三区综合| 成人va在线观看| 欧美视频在线观看一区二区| 欧美日韩中字一区| 精品黑人一区二区三区久久 | 99久久久国产精品免费蜜臀| 本田岬高潮一区二区三区| 欧美自拍偷拍午夜视频| 日韩欧美中文字幕制服| 国产精品全国免费观看高清| 亚洲成人av中文| 成人久久久精品乱码一区二区三区| 日韩成人伦理电影在线观看| 亚洲成人精品在线观看| 韩国av一区二区| 欧美视频你懂的| 国产欧美一区二区在线观看| 日韩专区一卡二卡| 一本色道久久综合亚洲精品按摩| 日韩免费在线观看| 亚洲线精品一区二区三区八戒| 韩国av一区二区三区四区| 欧美美女一区二区| 夜夜嗨av一区二区三区中文字幕| 激情另类小说区图片区视频区| 欧美亚洲自拍偷拍| 亚洲综合另类小说| 国产精品12区| 欧美一级理论性理论a| 亚洲综合在线视频| 97se亚洲国产综合在线| 久久精品亚洲麻豆av一区二区| 免费人成网站在线观看欧美高清| 在线精品视频一区二区| 亚洲女同一区二区| 91影视在线播放| 国产精品视频一二| 成人国产电影网| 国产精品色哟哟| 成人免费高清在线观看| 国产亚洲精品中文字幕| 国产成人自拍网| 国产午夜精品美女毛片视频| 国产福利精品一区二区| 久久久久久久性| 成人免费的视频| 亚洲色欲色欲www| 在线一区二区三区| 亚洲国产你懂的| 欧美一区二区网站| 老司机午夜精品| 国产日韩欧美激情| caoporn国产一区二区| 亚洲伦理在线免费看| 欧美伊人久久久久久久久影院| 亚洲动漫第一页| 欧美一级淫片007| 国产一区二区三区久久久| 国产亚洲精品免费| 色婷婷综合久久| 免费人成黄页网站在线一区二区| 精品少妇一区二区| 成人综合在线观看| 亚洲精品免费播放| 日韩欧美在线影院| 不卡av电影在线播放| 亚洲一区在线观看免费| 日韩午夜精品视频| 成人性色生活片| 亚洲成在线观看| 国产色产综合产在线视频| 91蝌蚪porny| 毛片不卡一区二区| 中文字幕一区二区三区精华液| 在线观看视频一区二区| 极品少妇xxxx精品少妇| 亚洲欧美一区二区三区国产精品 | www.在线欧美| 亚洲第一精品在线| 久久久www免费人成精品| 91丨porny丨首页| 久久se精品一区精品二区| 国产精品久久久久aaaa| 欧美一区二区三区日韩| 91在线精品秘密一区二区| 日韩福利电影在线观看| 国产精品久久久久久久久免费樱桃 | 久久精品欧美日韩| 在线精品视频小说1| 精一区二区三区| 午夜亚洲国产au精品一区二区| 久久久精品人体av艺术| 91精品中文字幕一区二区三区| www.日韩av| 国产一区不卡在线| 日日夜夜精品免费视频| 亚洲女与黑人做爰| 国产精品嫩草影院av蜜臀| 日韩欧美区一区二| 欧美区在线观看| 91浏览器入口在线观看| 成人午夜av影视| 岛国一区二区在线观看| 国内精品免费**视频| 日韩精品1区2区3区| 亚洲午夜电影在线观看|