吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6468|回复: 27
收起左侧

[Python 原创] 美化桌面 --4K必应壁纸下载及图片合成

[复制链接]
psqladm 发表于 2025-2-7 09:05
本帖最后由 psqladm 于 2025-2-20 21:49 编辑

Humming along_4k.jpg

下载4K必应壁纸,美化桌面,系统里可以设置定时更换。如有雷同,请飘过。修改增加多张图片合成。
[Python] 纯文本查看 复制代码
# !/usr/bin/env python
# coding=utf-8

from __future__ import (absolute_import, division, print_function, unicode_literals)

import requests
import os


def download_all_bing_4k_wallpapers(save_directory):
    # 创建保存目录(如果不存在)
    if not os.path.exists(save_directory):
        os.makedirs(save_directory)

    for i in range(100): # 一次下多少张,看个人需求,自个填数      
        # 发送HTTP GET请求获取必应壁纸信息
        url = "https://bingw.jasonzeng.dev?resolution=UHD&index=%s" % str(i) + "&format=json"
        response = requests.get(url).json()
        image_name = response['title'].replace('?', '') + '_4k.jpg'
        # 如已有,跳过
        if os.path.exists(os.path.join(save_directory, image_name)):
            print(i, image_name, " Already Exist")
            continue
        # 下载, 保存,格式为jpg
        url = "https://bingw.jasonzeng.dev?resolution=UHD&index=%s" % str(i)
        response = requests.get(url)
        if response.status_code == 200:
            with open(os.path.join(save_directory, image_name), 'wb') as f:
                f.write(response.content)
            print(i, image_name, f'4K壁纸已下载至 {os.path.join(save_directory, image_name)}')
        else:
            continue

    return


if __name__ == '__main__':

    # 调用函数下载4K壁纸(指定保存目录)
    download_all_bing_4k_wallpapers('D:\\必应壁纸\\')

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zhou068 + 1 + 1 我很赞同!
wjbg2022 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shenghuoai 发表于 2026-6-22 21:51
cxc666999 发表于 2025-2-7 16:40
改成多线程,下载速度拉满

我再博主的基础上做了个简单的多线程

[Python] 纯文本查看 复制代码
#!/usr/bin/env python
# coding=utf-8

from __future__ import (absolute_import, division, print_function, unicode_literals)

import requests
import os
from concurrent.futures import ThreadPoolExecutor, as_completed


def download_wallpaper(index, save_directory):
    try:
        # 获取壁纸信息
        info_url = f"https://bingw.jasonzeng.dev?resolution=UHD&index={index}&format=json"
        response = requests.get(info_url)
        response.raise_for_status()
        info = response.json()

        image_name = info['title'].replace('?', '') + '_4k.jpg'
        file_path = os.path.join(save_directory, image_name)

        if os.path.exists(file_path):
            print(index, image_name, "Already Exist")
            return f"Skipped: {image_name}"

        # 下载图片内容
        img_url = f"https://bingw.jasonzeng.dev?resolution=UHD&index={index}"
        img_response = requests.get(img_url)
        img_response.raise_for_status()

        with open(file_path, 'wb') as f:
            f.write(img_response.content)

        print(index, image_name, f'4K壁纸已下载至 {file_path}')
        return f"Downloaded: {image_name}"

    except Exception as e:
        print(f"Error downloading index {index}: {e}")
        return f"Error: {index}"


def download_all_bing_4k_wallpapers(save_directory, max_workers=10):
    if not os.path.exists(save_directory):
        os.makedirs(save_directory)

    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = [executor.submit(download_wallpaper, i, save_directory) for i in range(100)]

        for future in as_completed(futures):
            # 你可以通过future.result()查看每个线程的返回信息
            result = future.result()
            # 如果需要,可以在这里处理或记录结果


if __name__ == '__main__':
    download_all_bing_4k_wallpapers('D:\\必应壁纸\\2\\', max_workers=10)
 楼主| psqladm 发表于 2025-2-20 15:40
# !/usr/bin/env python
# coding=utf-8

from __future__ import (absolute_import, division, print_function, unicode_literals)

from PIL import Image

# 4张4K图片合成2x2网格并保持最终输出为3840x2160分辨率
def composite_4k_grid(input_files, output_path):
    if len(input_files) != 4:
        raise ValueError("需要精确4张输入图片")
    # 打开所有图片并验证尺寸
    images = [Image.open(f) for f in input_files]
    for idx, img in enumerate(images):
        if img.size != (3840, 2160):
            raise ValueError(f"第{idx + 1}张图片尺寸不符要求,应为3840x2160")
    # 创建新画布
    canvas = Image.new('RGB', (3840, 2160))
    # 定义网格参数
    grid_params = [
        {"position": (0, 0), "size": (1920, 1080)},
        {"position": (1920, 0), "size": (1920, 1080)},
        {"position": (0, 1080), "size": (1920, 1080)},
        {"position": (1920, 1080), "size": (1920, 1080)}
    ]
    for img, param in zip(images, grid_params):
        # 高质量缩小图片(使用LANCZOS算法)
        resized = img.resize(param["size"], Image.Resampling.LANCZOS)
        canvas.paste(resized, param["position"])
    canvas.save(output_path, quality=95, subsampling=0)

    return


if __name__ == '__main__':
    input_files = ['D:\\必应壁纸\\有羽毛的时尚达人.jpg',  # 左上
                   'D:\\必应壁纸\\红绿金刚鹦鹉之家.jpg',  # 右上
                   'D:\\必应壁纸\\物以类聚,人以群分.jpg',  # 左下
                   'D:\\必应壁纸\\物以类聚.jpg'  # 右下
                   ]
    output_path = 'D:\\必应壁纸\\combined_4k.jpg'  # 输出文件

    composite_4k_grid(input_files, output_path)
xueyinglantian 发表于 2025-2-7 10:43
maoxian008 发表于 2025-2-7 11:04
没有操作步骤吗
meigui6431 发表于 2025-2-7 11:13
感谢分享。如果有教程就更好了
 楼主| psqladm 发表于 2025-2-7 11:26
不提供编译版本啦,简单的小程序,并且各人存储文件夹也不一样,自个修改就好。
carpenter0851 发表于 2025-2-7 11:59
zhu8487 发表于 2025-2-7 11:32
感谢楼主分享试用

收藏了,谢谢分享。
超逸绝尘 发表于 2025-2-7 13:03
看不明白,但是挺厉害
SGJM1994 发表于 2025-2-7 13:45
收藏了,谢谢分享。
hncs2008 发表于 2025-2-7 16:23
这个可以有 赞一个
MAXINGXING 发表于 2025-2-7 16:24
厉害,说真的bing的壁纸确实好看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-28 03:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表