写点什么

Python 代码自动提取 Win10 内置的锁屏壁纸

作者:宇宙之一粟
  • 2022 年 6 月 13 日
  • 本文字数:3906 字

    阅读完需:约 13 分钟

Python代码自动提取Win10内置的锁屏壁纸

前言

自从用了 Win10,当开机的时候时不时会被惊艳到,有些推荐的背景图片真的很好看,比如下面这种:


在这里插入图片描述


在这里插入图片描述


1. 手动找到现有的方法

然后就开始在网上找方法,怎么下载这些图片。然后的确有方法,就是去到一个神不知鬼不觉的文件目录:​​C:\Users\用户名\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets​​ 然后看到一堆什么乱七八糟的文件,就是这些图片存在的地方。


壁纸存在地



这些壁纸应该都是 Win10 从微软服务器下载的,所以不同人的电脑壁纸不一样


这些文件都默认没有后缀名,然后我们把上面的文件增加 ​​.jpg​​ 的后缀才可以看到图片的庐山真面目,这里当然可以手动增加后缀名;

也可以把上诉文件复制到另一个位置,比如 E 盘的 Wallpaper 目录下,然后用 cmd 的批量重命名工具,输入以下命令:

ren E:\Wallpaper\* *.jpg
复制代码


在这里插入图片描述

然后就能正确查看这些图片了。可以=看到图片有横版和竖版的,分别为电脑端和手机端:

在这里插入图片描述

你会看到,一般每个画面有两张壁纸,一张为 1920 * 1080 分辨率的横屏桌面壁纸,一张为 1080 * 1920 分辨率的竖屏手机桌面壁纸。

现在你就可以把这些图片用作其他电脑或手机的桌面壁纸了。


2. 使用 WIN + R 打开运行的方法


使用快捷键 WIN + R 打开如下的运行界面:

输入如下的值,快速打开我们的文件夹:

%localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
复制代码


把我们的文章复制出来,更改文件后缀,比如我在此处加上 .png



3. Python 脚本自动提取

作为程序员,怎么能自己手动一个个该文件后缀呢,不能忍受,所以我们利用 Python 这个脚本语言来进行自动化处理。

环境

  • A Windows 10 PC

  • Python 3x

  • PIL Module For Python 3x


  1. 我们需要读取当前的用户名

# Set Environment Variablesusername = os.environ['USERNAME']
复制代码


  1. 拼装文件路径:

# All file urls    file_urls = {        "wall_src": "C:\\Users\\" + username                    + "\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\"                    + "LocalState\\Assets\\",        "wall_dst": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\",        "wall_mobile": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\mobile\\",        "wall_desktop": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\desktop\\"    }
复制代码


  1. 复制出文件:

# A method to import the wallpapers from src folder(dir_src)    @staticmethod    def copy_wallpapers():        w = Wallpaper        w.time_gap("Copying Wallpapers")        # Copy All Wallpapers From Src Folder To Dest Folder        for filename in os.listdir(w.file_urls["wall_src"]):            shutil.copy(w.file_urls["wall_src"] + filename, w.file_urls["wall_dst"])
复制代码


  1. 添加文件后缀:

# A method to Change all the Extensions    @staticmethod    def change_ext():        w = Wallpaper        w.time_gap("Changing Extensions")        # Look into all the files in the executing folder and change extension        for filename in os.listdir(w.file_urls["wall_dst"]):            base_file, ext = os.path.splitext(filename)            if ext == "":                if not os.path.isdir(w.file_urls["wall_dst"] + filename):                    os.rename(w.file_urls["wall_dst"] + filename,                              w.file_urls["wall_dst"] + filename + ".jpg")
复制代码


完整代码如下:


import osimport shutilimport timefrom PIL import Image

class Wallpaper: # Set Environment Variables username = os.environ['USERNAME']
# All file urls file_urls = { "wall_src": "C:\\Users\\" + username + "\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\" + "LocalState\\Assets\\", "wall_dst": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\", "wall_mobile": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\mobile\\", "wall_desktop": os.path.dirname(os.path.abspath(__file__)) + "\\Wallpapers\\desktop\\" } msg = ''' DDDDD OOOOO NN N EEEEEEE D D O O N N N E D D O O N N N E D D O O N N N EEEE D D O O N N N E D D O O N N N E DDDDD OOOOO N NN EEEEEEE '''
# A method to showcase time effect @staticmethod def time_gap(string): print(string, end='') time.sleep(1) print(".", end='') time.sleep(1) print(".")
# A method to import the wallpapers from src folder(dir_src) @staticmethod def copy_wallpapers(): w = Wallpaper w.time_gap("Copying Wallpapers") # Copy All Wallpapers From Src Folder To Dest Folder for filename in os.listdir(w.file_urls["wall_src"]): shutil.copy(w.file_urls["wall_src"] + filename, w.file_urls["wall_dst"])
# A method to Change all the Extensions @staticmethod def change_ext(): w = Wallpaper w.time_gap("Changing Extensions") # Look into all the files in the executing folder and change extension for filename in os.listdir(w.file_urls["wall_dst"]): base_file, ext = os.path.splitext(filename) if ext == "": if not os.path.isdir(w.file_urls["wall_dst"] + filename): os.rename(w.file_urls["wall_dst"] + filename, w.file_urls["wall_dst"] + filename + ".jpg")
# Remove all files Not having Wallpaper Resolution @staticmethod def extract_wall(): w = Wallpaper w.time_gap("Extracting Wallpapers") for filename in os.listdir(w.file_urls["wall_dst"]): base_file, ext = os.path.splitext(filename) if ext == ".jpg": try: im = Image.open(w.file_urls["wall_dst"] + filename) except IOError: print("This isn't a picture.", filename) if list(im.size)[0] != 1920 and list(im.size)[0] != 1080: im.close() os.remove(w.file_urls["wall_dst"] + filename) else: im.close() # Arrange the wallpapers into the corresponding folders @staticmethod def arr_desk_wallpapers(): w = Wallpaper w.time_gap("Arranging Desktop wallpapers") for filename in os.listdir(w.file_urls["wall_dst"]): base_file, ext = os.path.splitext(filename) if ext == ".jpg": try: im = Image.open(w.file_urls["wall_dst"] + filename)
if list(im.size)[0] == 1920: im.close() os.rename(w.file_urls["wall_dst"] + filename, w.file_urls["wall_desktop"] + filename) elif list(im.size)[0] == 1080: im.close() os.rename(w.file_urls["wall_dst"] + filename, w.file_urls["wall_mobile"] + filename) else: im.close() except FileExistsError: print("File Already Exists!") os.remove(w.file_urls["wall_dst"] + filename)
@staticmethod def exec_all(): w = Wallpaper w.copy_wallpapers() w.change_ext() w.extract_wall() w.arr_desk_wallpapers() print(w.msg) time.sleep(3)

wall = Wallpaper()wall.exec_all()
复制代码


然后直接在控制台 cmd 下,直接输入​ ​python warllpaper_extract.py​​​,但可能会发生如下错误:

解决方法:找不到模块 PIL,我们可以用 ​​​pip install Pillow​​​ 来安装:

在这里插入图片描述

安装成功后,再次执行

在这里插入图片描述


运行结果

图片提取完成,而且能把桌面和手机端的图片分开,

在这里插入图片描述

点 desktop 下,成功看到我们想要的图片,恭喜你,一旦下次发现了有新的锁屏壁纸,你就可以运行一下这个 Python 脚本,然后去选自己心仪的照片吧:

在这里插入图片描述

总结

至此我们从手动获取图片到利用 Python 实现自动化,而且通过本文你可以学习 Python 的 PIL 模块和静态方法。好了,我们下一篇文章再见!

发布于: 刚刚阅读数: 4
用户头像

宇宙古今无有穷期,一生不过须臾,当思奋争 2020.05.07 加入

🏆InfoQ写作平台-第二季签约作者 🏆 混迹于江湖,江湖却没有我的影子 热爱技术,专注于后端全栈,轻易不换岗 拒绝内卷,工作于软件工程师,弹性不加班 热衷分享,执着于阅读写作,佛系不水文

评论

发布
暂无评论
Python代码自动提取Win10内置的锁屏壁纸_Python_宇宙之一粟_InfoQ写作社区