电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:7日期:2022-06-21 17:18:17
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 Image2.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 圖片獲取

使用 PIL 的 open 函數打開圖片

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-32Filesji2aji2a.py =======================image to ascii=====inputfile:dora.pngoutputfile:dora.txtdistance?(Y/n):yresize?(needn’t:’’, square:side length, restangle:width,height):100

Opening ’dora.png’...Getting...Saving...Seccessfully

原圖:

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

結果:

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

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.sizeif 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) + distancetxt = 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 編程
相關文章:
主站蜘蛛池模板: 蜘蛛车-登高车-高空作业平台-高空作业车-曲臂剪叉式升降机租赁-重庆海克斯公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 【电子厂招聘_普工招工网_工厂招聘信息平台】-工立方打工网 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 鄂泉泵业官网|(杭州、上海、全国畅销)大流量防汛排涝泵-LW立式排污泵 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 升降炉_真空气氛炉_管式电阻炉厂家-山东中辰电炉有限公司 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 飞飞影视_热门电影在线观看_影视大全 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 |