婷婷综合国产,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
    日韩一区二区三免费高清| 欧美这里有精品| 婷婷丁香激情综合| 亚洲国产成人高清精品| 亚洲一区国产视频| 亚洲成人先锋电影| 奇米777欧美一区二区| 日本欧美一区二区三区乱码| 日韩黄色在线观看| 奇米色777欧美一区二区| 蜜乳av一区二区| 久久精品国产99国产| 国产中文字幕精品| 国产福利精品一区| 91亚洲精品乱码久久久久久蜜桃| 91一区二区三区在线播放| 日本福利一区二区| 欧美一区三区二区| 国产欧美日韩久久| 一区二区在线观看免费视频播放| 午夜精品久久久久久久蜜桃app| 青青草国产成人99久久| 国产一区二区三区观看| 99精品视频免费在线观看| 51精品久久久久久久蜜臀| 日韩免费看的电影| 国产精品久久久久久久裸模| 一区二区三区四区不卡在线| 免费在线观看一区二区三区| 国产精品影视网| 日本韩国欧美一区二区三区| 欧美大片一区二区三区| 亚洲乱码一区二区三区在线观看| 天堂精品中文字幕在线| 国产成人亚洲综合色影视| 欧美性感一区二区三区| 久久久国产精品午夜一区ai换脸| 亚洲精品国产a| 国产精品1区二区.| 欧美日韩一区二区在线视频| 久久久久久久久97黄色工厂| 亚洲成av人片一区二区三区| 国产99久久久国产精品免费看| 欧美日韩一区精品| 亚洲欧洲av色图| 青青草97国产精品免费观看无弹窗版| 91亚洲精品久久久蜜桃网站| 精品对白一区国产伦| 亚洲国产精品一区二区久久| 99视频有精品| 久久久国产一区二区三区四区小说| 伊人夜夜躁av伊人久久| 国产98色在线|日韩| 欧美刺激午夜性久久久久久久| 一区二区理论电影在线观看| 成人av资源下载| 久久嫩草精品久久久久| 美女视频一区二区三区| 欧美麻豆精品久久久久久| 亚洲色图丝袜美腿| 91亚洲大成网污www| 欧美国产精品中文字幕| 国内外成人在线视频| 欧美系列亚洲系列| 亚洲国产美女搞黄色| 色综合一区二区三区| 亚洲人成在线观看一区二区| 99麻豆久久久国产精品免费| 欧美极品另类videosde| 懂色av一区二区三区免费看| 亚洲国产精品精华液2区45| 国产乱理伦片在线观看夜一区| 欧美一二三四在线| 狠狠色综合播放一区二区| 欧美成人免费网站| 国产精品一二三区| 中文字幕国产一区二区| 99精品视频免费在线观看| 亚洲人快播电影网| 欧洲一区二区av| 婷婷综合在线观看| www成人在线观看| 粉嫩aⅴ一区二区三区四区 | 成人免费高清在线观看| 久久免费国产精品| 粉嫩av一区二区三区粉嫩| 国产人妖乱国产精品人妖| 国产精品主播直播| 国产精品视频一二| 色综合久久久网| 日韩国产精品久久久久久亚洲| 日韩欧美一区在线观看| 国产乱码一区二区三区| 1024国产精品| 欧美日韩一区二区三区视频| 青娱乐精品在线视频| 久久综合99re88久久爱| 91农村精品一区二区在线| 午夜国产精品一区| 久久久精品影视| 欧美午夜在线观看| 国产永久精品大片wwwapp| 亚洲视频在线观看三级| 欧美一区二区视频观看视频| 国产福利一区在线| 午夜精品国产更新| 中文字幕电影一区| 日韩午夜在线观看| 91视频国产观看| 久久精品久久久精品美女| 中文字幕av一区二区三区免费看 | 日本一区二区三区久久久久久久久不| 色妞www精品视频| 久久99热99| 亚洲大片一区二区三区| 久久久99久久| 欧美一二区视频| 欧美色涩在线第一页| 成人久久18免费网站麻豆 | 亚洲人精品午夜| 欧美一级免费大片| 91福利在线导航| 99精品桃花视频在线观看| 国产揄拍国内精品对白| 天堂va蜜桃一区二区三区| 中文字幕中文在线不卡住| 精品99一区二区三区| 欧美日韩激情一区二区三区| 99久久久国产精品免费蜜臀| 国产最新精品免费| 理论电影国产精品| 99精品视频一区| 亚洲成av人片| 亚洲色图色小说| 国产精品乱人伦中文| 精品国产免费久久| 欧美成va人片在线观看| 91精品国产入口| 3d成人h动漫网站入口| 欧美午夜片在线观看| 成人午夜电影久久影院| 国产福利一区二区| 亚洲国产视频a| 午夜影院久久久| 日韩黄色片在线观看| 久久人人超碰精品| 精品盗摄一区二区三区| 精品国产成人在线影院 | av在线不卡免费看| 国产精品综合一区二区三区| 蓝色福利精品导航| 久久精品国产网站| 国产一区二区调教| 国产酒店精品激情| 成人高清视频在线| 91香蕉视频mp4| 欧美日韩一区二区在线观看视频| 在线观看精品一区| 欧美日本国产一区| 精品少妇一区二区三区日产乱码 | 欧美性大战xxxxx久久久| 欧美日韩国产经典色站一区二区三区| 欧美日韩一区不卡| 日韩欧美一级二级三级久久久 | 国产91精品一区二区麻豆网站| 国产高清精品在线| 成人国产一区二区三区精品| 一本到不卡精品视频在线观看| 欧美三电影在线| 日韩欧美卡一卡二| 欧美国产日韩亚洲一区| 亚洲综合色噜噜狠狠| 日韩高清中文字幕一区| 国产一区不卡精品| 欧洲国内综合视频| 欧美v亚洲v综合ⅴ国产v| 欧美国产丝袜视频| 亚洲成人动漫在线观看| 国产美女在线观看一区| 91啪亚洲精品| 日韩亚洲欧美中文三级| 国产精品电影一区二区三区| 午夜精品久久久久久久| 国产成人精品免费网站| 欧美日韩国产一区| 国产视频一区二区三区在线观看| 亚洲女同一区二区| 九色综合国产一区二区三区| 色综合欧美在线视频区| 精品久久久三级丝袜| 一区二区三区在线看| 韩国精品主播一区二区在线观看 | 久久精品在这里| 亚洲123区在线观看| 国产成人精品免费| 日韩免费在线观看| 午夜免费久久看| 色综合天天做天天爱| 国产视频不卡一区| 麻豆国产一区二区|