真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python制作字符生成照片效果-創(chuàng)新互聯(lián)

Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。是一種面向?qū)ο蟮膭?dòng)態(tài)類型語(yǔ)言,最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell),隨著版本的不斷更新和語(yǔ)言新功能的添加,越來(lái)越多被用于獨(dú)立的、大型項(xiàng)目的開(kāi)發(fā)。

創(chuàng)新互聯(lián)是一家專業(yè)提供龍鳳企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為龍鳳眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

今天介紹的是用代碼將圖片以字符形式輸出。

  1. 打開(kāi)圖片,轉(zhuǎn)為灰度模式

Python用于圖像處理的模塊有很多,最常用的當(dāng)屬PIL和PyOpenCV了。本案使用PIL模塊來(lái)打開(kāi)圖像:

>>> from PIL import Image
>>> im = Image.open('xufive.jpg')
>>> im.size
(979, 1248)
>>> im.mode
'RGB'

im就是打開(kāi)的圖像對(duì)象,im.size是圖像的分辨率,im.mode是圖像模式。我們知道,計(jì)算機(jī)圖像有很多種顏色模式,RGB是最常見(jiàn)的色彩圖像模式。打印字符圖片的話,需要將RGB模式轉(zhuǎn)為灰度模式:

>>> im = im.convert('L')
>>> im.mode
'L'
  1. 改變分辨率

打印字符圖片,需要考慮顯示器每行顯示的字符個(gè)數(shù)。假定屏幕水平分辨率為1920,每個(gè)字符寬度占8個(gè)像素,每行可以顯示240個(gè)字符。綜合考量,我們?cè)O(shè)定每行顯示120個(gè)字符。這就需要我們將灰度圖片的寬度設(shè)置為120個(gè)像素,那么圖像高度的像素?cái)?shù)height應(yīng)為:

width = 120
height = int(width*im.size[1]/im.size[0])

按照新的分辨率生成圖像對(duì)象:

>>> im = im.resize((width, height))
>>> im.size
(120, 152)
  1. 反白處理

灰度模式下,每個(gè)像素的值域范圍是0~255,共有256級(jí)灰度??紤]到屏幕背景色可能是深色的,也可能是淺色的,我們需要提供圖像反白處理的手段。所謂反白處理,就是用灰度大值255減去每一個(gè)像素的灰度值作為該像素新的灰度值。遍歷每一個(gè)像素,固然可以實(shí)現(xiàn)反白,但速度會(huì)很慢。本案使用NumPy數(shù)組的廣播技術(shù),可以顯著提升處理速度。我們先把PIL圖像對(duì)象轉(zhuǎn)成NumPy數(shù)組:

>>> import numpy as np
>>> arr = np.array(im)
>>> arr.shape
(152, 120)
>>> arr.dtype
dtype('uint8')

需要特別說(shuō)明的是,PIL對(duì)象的圖像分辨率是120x152,表示圖像寬度120像素,高度152像素;轉(zhuǎn)成NumPy數(shù)組之后,數(shù)組的shape則是(152,120),表示圖像有152行(對(duì)應(yīng)高度),120列(對(duì)應(yīng)寬度)。雖然PIL對(duì)象和NumPy數(shù)組關(guān)于行列的概念不一致,但表達(dá)的物理意義是相同的。

利用NumPy數(shù)組的廣播技術(shù)實(shí)現(xiàn)反白處理,只需一行代碼,并且瞬間完成:

arr = 255 - arr
  1. 確定灰度-字符映射表

在顯示器上,字符是由點(diǎn)陣組成的。每個(gè)字符的亮點(diǎn)(或暗點(diǎn))不同,可以用來(lái)表示不同的灰度。本案使用了下面8個(gè)字符表示不同的灰度:

>>> chs = np.array([' ', '.', '-', '+', '=', '*', '#', '@'])
>>> chs.dtype
dtype('

8個(gè)不同的字符,只能表示8級(jí)灰度,因此需要將像素的256級(jí)灰度值轉(zhuǎn)換為8級(jí):

>>> arr = arr/32
>>> arr = arr.astype(np.uint8)
>>> arr.min(), arr.max()
(0, 7)
  1. 灰度轉(zhuǎn)字符

接下來(lái)需要將值域范圍在0~7之間的每一個(gè)像素轉(zhuǎn)為灰度-字符映射表中對(duì)應(yīng)的字符。同樣的,我們可以用兩層嵌套的循環(huán)結(jié)構(gòu)來(lái)完成,不過(guò)更好的選擇是用NumPy數(shù)組的矢量化特性來(lái)實(shí)現(xiàn)。本例展示了NumPy數(shù)組非常少見(jiàn)的一種應(yīng)用方式,我很少見(jiàn)到有人這樣應(yīng)用。

>>> arr = chs[arr]
>>> arr.shape
(152, 120)
>>> arr.dtype
dtype('
  1. 打印

有了上述鋪墊,打印自然是水到渠成了:

>>> for i in range(arr.shape[0]):
   for j in range(arr.shape[1]):
     print(arr[i,j], end='')
   print()
  1. 保存為文件

如果在顯示終端上打印不方便觀看的話,還可以將字符數(shù)據(jù)保存成文件:

>>> with open('xufive.txt', 'w') as fp:
   for line in arr.tolist():
     fp.write(''.join(line))
     fp.write('\n')

下圖是輸出到文本文件,在編輯器中顯示的效果。

Python制作字符生成照片效果

  1. 完整代碼
    在不同的運(yùn)行環(huán)境中,最終圖像顯示的寬高比和原圖會(huì)有差異。為了抵消差異,我在下面的代碼中增加了一個(gè)矯正系數(shù)k,可以通過(guò)調(diào)整這個(gè)參數(shù),獲得滿意的顯示效果。
from PIL import Image
import numpy as np

def print_photo(photo_file, width=120, k=1.0, reverse=False, outfile=None):
   """打印照片,默認(rèn)120個(gè)字符寬度"""

   im = Image.open(photo_file).convert('L') # 打開(kāi)圖片文件,轉(zhuǎn)為灰度格式
   height = int(k*width*im.size[1]/im.size[0]) # 打印圖像高度,k為矯正系數(shù),用于矯正不同終端環(huán)境像素寬高比
   arr = np.array(im.resize((width, height ))) # 轉(zhuǎn)為NumPy數(shù)組
   if reverse: # 反色處理
     arr = 255 - arr

   chs = np.array([' ', '.', '-', '+', '=', '*', '#', '@']) #灰度-字符映射表
   arr= chs[(arr/32).astype(np.uint8)] # 灰度轉(zhuǎn)為對(duì)應(yīng)字符

   if outfile:
     with open(outfile, 'w') as fp:
       for row in arr.tolist():
         fp.write(''.join(row))
         fp.write('\n')
   else:
     for i in range(arr.shape[0]): # 逐像素打印
       for j in range(arr.shape[1]):
         print(arr[i,j], end=' ')
       print()

if __name__ == '__main__':
   print_photo('xufive.jpg', width=360, k=0.5, outfile='xufive.txt')

下圖是在命令行窗口顯示的效果。

Python制作字符生成照片效果

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享文章:Python制作字符生成照片效果-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://weahome.cn/article/ccgcjj.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部