前言
距離七夕節還有2天了,想好怎么“殺狗”和去哪玩了嗎
今天來教大家做一個“七夕照片墻”,可以把她/他的照片,合成一張你指定形狀的圖片
沒有物件照片的,就自己想辦法吧
Python從零基礎入門到實戰系統教程、原始碼、視頻,想要資料集的同學也可以點這里
第一步:匯入所需的模塊
import os
import random
import pygame # pip install pygame
from PIL import Image # pip install pillow
第二步:先初始化模塊
pygame.init()
第三步:定義字體,設定初始化大小
text = '七夕快樂' # 字體形狀, 可以修改成名字
size = 30 # 字體大小
# 定義字體,引數依次是字體、字體大小
font = pygame.font.Font('msyh.ttc', size)
print(font)
第四步:渲染字體
# 渲染字體,引數依次是被渲染的文字、是否無鋸齒、字體顏色、背景顏色
# (0, 0, 0) 黑色 (255, 255, 255) 白色
font_text = font.render(text, True, (0, 0, 0), (255, 255, 255))
print(font_text)
# 獲取渲染后的字體的高度和寬度
height = font_text.get_height() # 高度
width = font_text.get_width() # 寬度
第五步:像素值,指定成二維串列
# 最后所有像素點會成為一個二維串列(形如[[1,2,3],[4,5,6]]),image_row_list是最外層的、總的串列
image_row_list = []
for x in range(height):
# image_col_list 是 image_row_list 中的每一個串列元素
image_col_list = []
for y in range(width):
# get_at((x,y))是回傳像素點的像素值,[0]為第一個值R,
# 由于渲染后的圖只有黑色和白色,所以只要[0]!=255,就是黑色
if font_text.get_at((y, x))[0] != 255: # 如果像素點不是 白色
image_col_list.append(1)
else:
image_col_list.append(0)
image_row_list.append(image_col_list)
for row in image_row_list:
print(row)
第六步:根據矩陣貼圖
# 獲取 image_row_list 串列的寬度和高度
width = len(image_row_list[0])
height = len(image_row_list)
# 設定最終輸出的圖片new_image,顏色模式RGB,寬和高分別放大100和100倍,背景色為白色,
new_image = Image.new('RGB', (100 * width, 100 * height), (255, 255, 255))
# 設定每一個(原圖集)小圖的裁剪尺寸
size = 100
# 遍歷所有的像素點,如果像素點為1,也就是有顏色,則隨機選擇一張圖片,將像素點填充為這張圖片
for row in range(height):
for col in range(width):
if image_row_list[row][col] == 1:
# 從本地讀取檔案
source_image = Image.open('images\\' + random.choice(os.listdir(r'images')))
# 重新修改檔案大小
source_image = source_image.resize((size, size), Image.ANTIALIAS) # 是否使用抗鋸齒(antialias)功能
# 將圖片復制到 new_image
new_image.paste(source_image, (col * size, row * size))
最后輸出圖片
print('正在生成照片墻...')
new_image.save(text + '.jpg')
print('生成完畢, 請在當前檔案專案下找照片墻檔案')

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293976.html
標籤:python
上一篇:使用Visual Studio Code 運行ROS
下一篇:基于PaddleClas2.2的奧特曼識別,從資料訓練到利用PaddleLite2.9框架將模型部署到樹莓派4b 64位(呼叫python api進行圖片&視頻流識別)
