欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python生成照片墻的示例代碼

 更新時(shí)間:2020年04月09日 14:29:50   作者:W.Y.H  
這篇文章主要介紹了利用python生成照片墻的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

PIL(Python Image Library)是python的第三方圖像處理庫(kù),但是由于其強(qiáng)大的功能與眾多的使用人數(shù),幾乎已經(jīng)被認(rèn)為是python官方圖像處理庫(kù)了。其官方主頁(yè)為:PIL。

PIL歷史悠久,原來(lái)是只支持python2.x的版本的,后來(lái)出現(xiàn)了移植到python3的庫(kù)pillow,pillow號(hào)稱是friendly fork for PIL,其功能和PIL差不多,但是支持python3。本文只使用了PIL那些最常用的特性與用法,主要參考自:http://www.effbot.org/imagingbook

Part 1:利用python生成照片墻

(1)簡(jiǎn)要介紹思路:

(1)通過(guò)給定字符串生成一張圖片;
(2)然后將該圖片的每個(gè)像素的寬擴(kuò)張edge_len倍,高也擴(kuò)張edge_len倍,假設(shè)edge_len=60,那么原文字圖片的每個(gè)像素就變成了60*60像素的一個(gè)圖片;
(3)原文字圖片的每個(gè)像素的透明度不同,顯示文字的地方,透明度低(不透明),這2個(gè)字周邊的地方,透明度高(透明),我們根據(jù)原文字圖片每個(gè)像素的透明度,來(lái)設(shè)定放到這個(gè)像素(其實(shí)寬高已經(jīng)擴(kuò)大了60倍)圖片的透明度(trans_alpha方法實(shí)現(xiàn))。

(2)導(dǎo)入庫(kù)文件

from PIL import Image, ImageDraw, ImageFont
import os

(3)由文字生成圖像

def gen_text_img(text, font_size=20, font_path=None):
  # args:文字內(nèi)容,文字字體大小,字體路徑
  font = ImageFont.truetype(font_path, font_size) if font_path is not None else None
  (width, length) = font.getsize(text) # 獲取文字大小
  text_img = Image.new('RGBA', (width, length))
  draw = ImageDraw.Draw(text_img)
  # 第一個(gè)tuple表示未知(left,up),之后是文字,然后顏色,最后設(shè)置字體
  draw.text((0, 0), text, fill=(0, 0, 0), font=font)
  text_img.save('./temp_pic.jpg')
  return text_img

(4)透明度調(diào)節(jié)

def trans_alpha(img, pixel):
  '''
  根據(jù)rgba的pixel調(diào)節(jié)img的透明度
  這里傳進(jìn)來(lái)的pixel是一個(gè)四元組(r,g,b,alpha)
  '''
  _, _, _, alpha = img.split()
  alpha = alpha.point(lambda i: pixel[-1]*10)
  img.putalpha(alpha)  #Part2有介紹
  return img

(5)根據(jù)透明度參數(shù)對(duì)放大文字圖進(jìn)行像素覆蓋

def picture_wall_mask(text_img, edge_len, pic_dir="./user"):
  # 根據(jù)文字圖gen_text_img像生成對(duì)應(yīng)的照片墻,輸入:文字圖像,各個(gè)照片邊長(zhǎng),照片所在路徑
  new_img = Image.new('RGBA', (text_img.size[0] * edge_len, text_img.size[1] * edge_len))
  file_list = os.listdir(pic_dir)
  img_index = 0
  for x in range(0, text_img.size[0]):
    for y in range(0, text_img.size[1]):
      pixel = text_img.getpixel((x, y))#Part2有介紹
      file_name = file_list[img_index % len(file_list)]
      try:
        img = Image.open(os.path.join(pic_dir, file_name)).convert('RGBA')#Part2有介紹
        img = img.resize((edge_len, edge_len))
        img = trans_alpha(img, pixel)
        new_img.paste(img, (x * edge_len, y * edge_len)) #指定區(qū)域替換,Part2有介紹
        img_index += 1
      except Exception as e:
        print(f"open file {file_name} failed! {e}")
  return new_img

(6)生成照片墻

def main(text='', font_size = 20, edge_len = 60,pic_dir = "./user", out_dir = "./out/", font_path = './demo.ttf'):
  '''
  生成照片墻
  :param text: Text of picture wall, if not defined this will generage a rectangle picture wall
  :param font_size: font size of a clear value
  :param edge_len: sub picture's egde length
  '''
  if len(text) >= 1:
    text_ = ' '.join(text)#將字符串用空格分隔開(kāi),提高展示效果
    #text_ = text
    print(f"generate text wall for '{text_}' with picture path:{pic_dir}")
    text_img = gen_text_img(text_, font_size, font_path)
    # text_img.show()
    img_ascii = picture_wall_mask(text_img, edge_len, pic_dir)
    # img_ascii.show()
    img_ascii.save(out_dir + os.path.sep + '_'.join(text) + '.jpg')

(7)函數(shù)執(zhí)行與傳參

if __name__ == '__main__':
  main(text='python')

文件目錄結(jié)構(gòu)如下,以供參考:out存放生成的照片墻,user存放貼上去的圖片。


完整代碼參考:git鏈接

(8)樣圖


Part 2:圖像處理過(guò)程中中學(xué)習(xí)到的幾個(gè)知識(shí)點(diǎn):

(1)python PNG圖片顯示導(dǎo)入庫(kù)文件

僅適用于顯示png格式的圖片

import matplotlib.pyplot as plt # plt 用于顯示圖片
import matplotlib.image as mpimg # mpimg 用于讀取圖片

顯示圖片

lena = mpimg.imread('temp_pic.png') # 讀取和代碼處于同一目錄下的 lena.png
# 此時(shí) lena 就已經(jīng)是一個(gè) np.array 了,可以對(duì)它進(jìn)行任意處理
lena.shape #(512, 512, 3)
plt.imshow(lena) # 顯示圖片
plt.axis('off') # 不顯示坐標(biāo)軸
plt.show()

(2)PIL中圖像格式轉(zhuǎn)換img.convert()函數(shù)

在數(shù)字圖像處理中,針對(duì)不同的圖像格式有其特定的處理算法。所以,在做圖像處理之前,我們需要考慮清楚自己要基于哪種格式的圖像進(jìn)行算法設(shè)計(jì)及其實(shí)現(xiàn)。本文基于這個(gè)需求,使用python中的圖像處理庫(kù)PIL來(lái)實(shí)現(xiàn)不同圖像格式的轉(zhuǎn)換。
對(duì)于彩色圖像,不管其圖像格式是PNG,還是BMP,或者JPG,在PIL中,使用Image模塊的open()函數(shù)打開(kāi)后,返回的圖像對(duì)象的模式都是“RGB”。而對(duì)于灰度圖像,不管其圖像格式是PNG,還是BMP,或者JPG,打開(kāi)后,其模式為“L”。對(duì)于PNG、BMP和JPG彩色圖像格式之間的互相轉(zhuǎn)換都可以通過(guò)Image模塊的open()和save()函數(shù)來(lái)完成。具體說(shuō)就是,在打開(kāi)這些圖像時(shí),PIL會(huì)將它們解碼為三通道的“RGB”圖像。用戶可以基于這個(gè)“RGB”圖像,對(duì)其進(jìn)行處理。處理完畢,使用函數(shù)save(),可以將處理結(jié)果保存成PNG、BMP和JPG中任何格式。這樣也就完成了幾種格式之間的轉(zhuǎn)換。同理,其他格式的彩色圖像也可以通過(guò)這種方式完成轉(zhuǎn)換。當(dāng)然,對(duì)于不同格式的灰度圖像,也可通過(guò)類似途徑完成,只是PIL解碼后是模式為“L”的圖像。

而對(duì)于Part 1中convert()函數(shù)的使用,推薦一篇博文Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換以供參考學(xué)習(xí)。

(3)img.paste()函數(shù)

第一個(gè)參數(shù)是用來(lái)覆蓋的圖片,第二個(gè)參數(shù)是覆蓋的位置,參考博文

(4)img.getpixel()函數(shù)

查看圖像存儲(chǔ)值,參考博文

(5)python圖像處理:給圖像添加透明度(alpha通道)

主要介紹img.putalpha()函數(shù)的用法,參考博文

到此這篇關(guān)于利用python生成照片墻的示例代碼的文章就介紹到這了,更多相關(guān)python生成照片墻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 實(shí)現(xiàn)超級(jí)瑪麗游戲

    python 實(shí)現(xiàn)超級(jí)瑪麗游戲

    這篇文章主要介紹了python 實(shí)現(xiàn)超級(jí)瑪麗游戲,幫助大家更好的理解和使用python開(kāi)發(fā)游戲,感興趣的朋友可以了解下
    2020-11-11
  • python數(shù)據(jù)解析之XPath詳解

    python數(shù)據(jù)解析之XPath詳解

    本篇文章主要介紹了python數(shù)據(jù)解析之xpath的基本使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • matplotlib實(shí)現(xiàn)顯示偽彩色圖像及色度條

    matplotlib實(shí)現(xiàn)顯示偽彩色圖像及色度條

    今天小編就為大家分享一篇matplotlib實(shí)現(xiàn)顯示偽彩色圖像及色度條,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python實(shí)現(xiàn)的防DDoS腳本

    python實(shí)現(xiàn)的防DDoS腳本

    實(shí)現(xiàn)原理是,查詢netstat的連接數(shù),同IP超過(guò)一定連接的用iptables封禁一定時(shí)間,自動(dòng)封禁,自動(dòng)解封。
    2011-02-02
  • python base64庫(kù)給用戶名或密碼加密的流程

    python base64庫(kù)給用戶名或密碼加密的流程

    這篇文章主要介紹了python base64庫(kù)給用戶名或密碼加密,需要的朋友可以參考下
    2020-01-01
  • Python中Sorted()函數(shù)的key參數(shù)使用方法詳解

    Python中Sorted()函數(shù)的key參數(shù)使用方法詳解

    這篇文章主要介紹了關(guān)于Python中Sorted()函數(shù)的key參數(shù)使用方法 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python處理mysql特殊字符的問(wèn)題

    Python處理mysql特殊字符的問(wèn)題

    今天小編就為大家分享一篇Python處理mysql特殊字符的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 對(duì)Python字符串中的換行符和制表符介紹

    對(duì)Python字符串中的換行符和制表符介紹

    下面小編就為大家分享一篇對(duì)Python字符串中的換行符和制表符介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python PyQt5中單行文本輸入控件QLineEdit用法詳解

    python PyQt5中單行文本輸入控件QLineEdit用法詳解

    在PyQt5的GUI編程中,QLineEdit控件是一個(gè)用于輸入和編輯單行文本的部件,它提供了豐富的功能和靈活性,可以輕松地實(shí)現(xiàn)用戶輸入的捕獲、驗(yàn)證和格式化等功能,本文將通過(guò)實(shí)際案例詳細(xì)介紹QLineEdit控件的常用方法,需要的朋友可以參考下
    2024-08-08
  • Python 實(shí)現(xiàn)PS濾鏡的旋渦特效

    Python 實(shí)現(xiàn)PS濾鏡的旋渦特效

    這篇文章主要介紹了Python 實(shí)現(xiàn) PS 濾鏡的旋渦特效,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論