前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么叫程序员的浪漫,只要能用代码做成的都不叫事,Python制作炫酷七夕照片墙

什么叫程序员的浪漫,只要能用代码做成的都不叫事,Python制作炫酷七夕照片墙

作者头像
松鼠爱吃饼干
发布2021-09-02 10:02:49
2760
发布2021-09-02 10:02:49
举报
文章被收录于专栏:Python分享

前言

距离七夕节还有2天了,想好怎么“杀狗”和去哪玩了吗

今天来教大家做一个“七夕照片墙”,可以把她/他的照片,合成一张你指定形状的图片

没有对象照片的,就自己想办法吧

Python从零基础入门到实战系统教程、源码、视频、在线一对一解答,可以加群:1039649593

前言

距离七夕节还有2天了,想好怎么“杀狗”和去哪玩了吗

今天来教大家做一个“七夕照片墙”,可以把她/他的照片,合成一张你指定形状的图片

没有对象照片的,就自己想办法吧

第一步:导入所需的模块

代码语言:javascript
复制
import os
import random
import pygame   # pip install pygame
from PIL import Image   # pip install pillow

第二步:先初始化模块

代码语言:javascript
复制
pygame.init()

第三步:定义字体,设定初始化大小

代码语言:javascript
复制
text = '七夕快乐'  # 字体形状, 可以修改成名字
size = 30  # 字体大小

# 定义字体,参数依次是字体、字体大小
font = pygame.font.Font('msyh.ttc', size)
print(font)

第四步:渲染字体

代码语言:javascript
复制
# 渲染字体,参数依次是被渲染的文字、是否无锯齿、字体颜色、背景颜色
# (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()  # 宽度

第五步:像素值,指定成二维列表

代码语言:javascript
复制
# 最后所有像素点会成为一个二维列表(形如[[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)

第六步:根据矩阵贴图

代码语言:javascript
复制
# 获取 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))

最后输出图片

代码语言:javascript
复制
print('正在生成照片墙...')
new_image.save(text + '.jpg')
print('生成完毕, 请在当前文件项目下找照片墙文件')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松鼠爱吃饼干 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • Python从零基础入门到实战系统教程、源码、视频、在线一对一解答,可以加群:1039649593
    • 前言
    • 第一步:导入所需的模块
    • 第二步:先初始化模块
    • 第三步:定义字体,设定初始化大小
    • 第四步:渲染字体
    • 第五步:像素值,指定成二维列表
    • 第六步:根据矩阵贴图
    • 最后输出图片
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档