美文网首页
Windows下自动编辑桌面壁纸

Windows下自动编辑桌面壁纸

作者: 练习时长两年半的写作练习生 | 来源:发表于2023-03-19 11:46 被阅读0次

    昨天我突发奇想,要写一个程序,每天给桌面壁纸添加一张 xkcd 的漫画。于是我做了以下一系列事情,成功实现了功能。
    注意:执行前建议备份文件

    找到桌面壁纸位置

    我的 Windows 10 桌面壁纸是在C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Themes文件夹下的名为TranscodedWallpaper的文件。

    使用爬虫获取 xkcd 漫画

    xkcd 网站的结构比较简单,只需要在 HTML 中找出 comic 图像链接即可。使用代码如下:

    def get_xkcd_image():
        url = 'https://xkcd.com/'
    
        try:
            # 使用 requests 库获取网页
            r = requests.get(url)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
    
            # 使用 bs4.BeautifulSoup 解析 HTML
            soup = BeautifulSoup(r.text, 'lxml')
            imgs = soup.find_all('img')
    
            # 在各个图片链接中找到 xkcd 漫画链接
            for i in imgs:
                src = str(i.get('src'))
                if '/comics/' in src:
                    if src.startswith('//'):
                        src = 'https:' + src
    
                    # 获取并保存漫画图片
                    imgfile = requests.get(src)
                    imgfile.raise_for_status()
                    with open('./resources/xkcd.jpg', 'wb') as f:
                        f.write(imgfile.content)
                        f.close()
                    print('Get xkcd image success')
                    break
            else:
                raise Exception(f'No comic found in {url}')
    
        # 出现异常时保存异常信息
        except Exception as e:
            print('Get xkcd image fail')
            with open(f'crash.log', 'a') as f:
                # current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                print(f'[{current_date}]:', e, file=f)
                f.close()
    

    使用 PIL 图像处理库编辑壁纸

    由于 PIL 库不支持保存到无扩展名文件,所以这里使用了复制文件的方法。

    def write_to_wallpaper():
        try:
            # Open background
            wallpaper = Image.open('./resources/background.jpg')
    
            # Open xkcd image
            xkcd = Image.open('./resources/xkcd.jpg')
            wallpaper_xkcd = xkcd.resize((2 * xkcd.width, 2 * xkcd.height)).convert('RGB')
            # 我这里设置将 xkcd 漫画放到壁纸右上角
            wallpaper.paste(wallpaper_xkcd, box=(wallpaper.width * 15 // 16 - wallpaper_xkcd.width, wallpaper.height // 16))
    
            # Save to wallpaper
            with open('./wallpaper.jpg', 'wb') as f:
                wallpaper.save(f)
                f.close()
            # username 需要换成自己的
            shutil.copyfile('./wallpaper.jpg', f'C:\\Users\\{username}\\AppData\\Roaming\\Microsoft\\Windows\\Themes\\TranscodedWallpaper')
            print('Write to wallpaper success')
    
        except Exception as e:
            print('Write to wallpaper fail')
            with open(f'crash.log', 'a') as f:
                print(f'[{current_date}]:', e, file=f)
                f.close()
    

    预览效果如下图,可以看到壁纸右上角添加了一张 xkcd 漫画。


    wallpaper.jpg

    将脚本添加到 Windows 任务

    程序设置完成后,要想定时执行,还需要添加到 Windows 任务。
    使用 Windows 的搜索功能(快捷键:Windows+Q)找到“任务计划程序”。点击右侧“操作”中的“创建任务”进行设置。具体设置方法见参考资料中的“windows定时运行exe文件”。


    任务计划程序

    设置触发器

    一定要设置触发器,否则任务不知道应该在什么时间执行。我设置为每天 23:00 执行。


    触发器

    设置操作时的参数

    • 程序或脚本:如果你的系统安装了 python,“程序或脚本”一栏可以写 python,也可以写 python.exe 的路径。
    • 添加参数:“添加参数”只需要写脚本的路径。(实际上可以都写到“程序或脚本”一栏,系统会自动划分参数)
    • 起始于:一定要写,否则程序可能不会正确执行。这个参数设置为脚本的路径。

    这样就实现了 Windows 下自动编辑桌面壁纸。

    参考资料

    相关文章

      网友评论

          本文标题:Windows下自动编辑桌面壁纸

          本文链接:https://www.haomeiwen.com/subject/bfierdtx.html