【python】给你女神制作一个520图片墙吧~

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

环境使用

所需软件:

  • Python 3.8 解释器

  • Pycharm 编辑器

模块使用:

内置模块

  • import re >>> python独有的匹配字符串的模块,该模块种提供功能基于正则表达式实现的,

    对于字符串进行模糊匹配找到想要的内容信息,一般用于爬虫或者自动化测试前后端不分离项目

  • import os >>> 包含普遍的操作系统功能

第三方模块

  • import requests >>> 网络请求库,提供多种网络请求方法并可定义复杂的发送信息

  • import ctypes >>> 提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数

如果安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

代码展示

一、采集壁纸

这里就采集一些壁纸做图片备用,嘿嘿

# 导入数据请求模块
import requests
# 导入正则表达式模块
import re

“”"

1. 发送请求

“”"

for page in range(3, 21):
    print(f'正在采集第{page}页的数据内容')

请求链接

    link = f'http://****/index_{page}.htm'

发送请求

    html_data = requests.get(link).text

提取ID

    img_id_list = re.findall('<a href="/desk/(\d+)\.htm" title=', html_data)

for循环遍历

    for img_id in img_id_list:

请求链接

        url = f'http://*****/desk/{img_id}.htm'

发送请求

        response = requests.get(url)

“”"

<Response [200]> 响应对象, 表示请求成功

2. 获取数据, 获取网页源代码 <服务器返回响应数据>

response.text 获取响应文本数据

response.encoding = response.apparent_encoding 自动识别码

3. 解析数据, 提取我们想要的数据内容 壁纸链接以及名字

正则表达式简单使用:

re.findall(什么数据, 什么地方) --> 找到所有我们想要的数据内容

“”"
获得到数据, 返回出现乱码了

        response.encoding = 'gbk'

链接地址 以及 标题

        img, title = re.findall('<img src="(.*?)" alt="(.*?)"', response.text)[0]
        print(img, title)

“”"

4. 保存数据, 把壁纸文件保存到本地文件

图片/视频/音频/特定格式文件… 发送请求, 获取二进制数据内容

解包 --> img, title = (‘链接’, ‘标题’)

“”"

发送请求, 获取数据

        img_content = requests.get(img).content
        with open('img\\' + title + '.jpg', mode='wb') as f:
            f.write(img_content)

我这里到第15页就暂停了,你们可以自行去等待它下载



可以看到是真的很高清

二、自动切换壁纸
# 导入文件操作模块
import os
import ctypes
# 时间模块
import time
# 随机模块
import random
# 写一个界面, 让用户自动选择文件夹, 自动设置更换时间
源码、教程、资料+V:pytho8987
# 读文目录里面文件名
path = 'D:\\自游\\彼岸壁纸\\img\\'
files = os.listdir(path)
# for循环遍历 按照顺序更换了 随机
img_file_list = [path + file for file in files]
# 当什么成立的时候 True 布尔类型
while True:  # 死循环
    # time.sleep()
    img_file = random.choice(img_file_list)
    print(img_file)
    ctypes.windll.user32.SystemParametersInfoW(20, 0, img_file, 3)
# for file in files:
#     # 延时
#     time.sleep(3)
#     img_file = path + file
#     print(img_file)
# ctypes.windll.user32.SystemParametersInfoW(20, 0, img_file, 3)
三、制作520图集
import os
import random
import pygame  # pip install pygame
from PIL import Image  # pip install pillow
text = '520快乐'  # 字体形状, 可以修改成名字
size = 30  # 字体大小

初始化

pygame.init()

定义字体,参数依次是字体、字体大小

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()  # 宽度

print(font_text.get_at((1, 1))[0])

最后所有像素点会成为一个二维列表(形如[[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)

""""""""""""""""""""""""""""""""""""""""""
源码、教程、资料+V:pytho8987
for row in image_row_list:
    print(row)
""""""""""""""""""""""""""""""""""""""""""

""""""""""""""""""""""""""""""""""""""""""
# for row in image_row_list:
#     for col in row:
#         if col == 1:
#             print('1', end='')
#         else:
#             print(' ', end='')
#     print()
""""""""""""""""""""""""""""""""""""""""""

获取 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('data\\' + random.choice(os.listdir(r'data')))
            # 重新修改文件大小
            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('生成完毕, 请在当前文件项目下找照片墙文件')
import os
import ctypes
import cv2


def Change():
    # 壁纸文件夹路径
    源码、教程、资料+V:pytho8987
    wallpaper_dir = r"D:\自游\彼岸壁纸\output"
    # 获取壁纸文件夹中的文件列表
    wallpapers = os.listdir(wallpaper_dir)
    # 随机选择一张壁纸
    # wallpaper_filename = random.choice(wallpapers)
    for wallpaper in wallpapers:
        # 拼接壁纸文件的完整路径
        wallpaper_path = os.path.join(wallpaper_dir, wallpaper)
        # 设置壁纸
        ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_path, 3)


def convert_mp4_to_jpgs(path):
    video_capture = cv2.VideoCapture(path)
    still_reading, image = video_capture.read()
    frame_count = 5  # 保存的起始帧的编号005
    while still_reading:
        cv2.imwrite(f"output/frame_{frame_count:03d}.jpg", image)
        # read next image
        still_reading, image = video_capture.read()
        frame_count += 5  # 保存帧依次增加5005>>010>>015.......

Change()

尾语 💝

好了,今天的分享就差不多到这里了!

完整代码、更多资源、疑惑解答直接点击下方名片自取即可。

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值