必应手机壁纸常见的尺寸有哪些?

2025-03-29 04:23:09 40 分享链接 开发笔记 python

必应手机壁纸的尺寸选择可以通过调整 API 接口参数或 URL 后缀来实现。除了常见的 1080x19202160x3840,以下是其他可通过技术手段获取的尺寸类型及适用场景:

一、必应 API 直接支持的尺寸

必应的官方 API 提供了 resolution 参数,可直接指定以下几种固定分辨率(以横向像素数表示):

  1. 1366

    • 对应分辨率:1366x768(16:9)
    • 适用设备:早期宽屏笔记本、部分中低端安卓手机(如三星 Galaxy On5)。
    • 使用方法:在 API URL 中添加 &resolution=1366,例如:

      url = f"https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN&resolution=1366"
  2. 3840

    • 对应分辨率:3840x2160(4K,16:9)
    • 适用设备:高端安卓旗舰(如索尼 Xperia 1 V)、折叠屏手机(如三星 Galaxy Z Fold5)。
    • 使用方法:在 API URL 中添加 &resolution=3840
  3. UHD

    • 等同于 3840x2160,是 4K 分辨率的别名。
    • 使用方法:在 API URL 中添加 &resolution=UHD

二、通过 URL 后缀自定义的尺寸

必应壁纸的原始 URL 包含 urlbase 字段,可通过拼接 _宽度x高度.jpg 来获取非标尺寸。以下是常见手机屏幕的适配方案:

1. 主流全面屏尺寸

尺寸比例适用设备(示例)
1080x234019.5:9iPhone 13 Mini、华为 P50
1080x24009:20Google Pixel 7、Pixel 8
1440x304019:9三星 Galaxy S23 Ultra
1644x38409:21索尼 Xperia 1 V、Xperia PRO-I

示例代码

# 拼接 1080x2340 尺寸
wallpaper_url = f"https://www.bing.com{data['images'][0]['urlbase']}_1080x2340.jpg"

2. 特殊比例尺寸

  • 21:9 超宽屏:如 2560x1080(适用于 LG G8X ThinQ)。
  • 正方形:如 1080x1080(适用于 iPhone SE 第三代的主屏幕图标背景)。
  • 折叠屏展开状态:如 2208x2480(三星 Galaxy Z Fold5 展开后)。

三、实际验证有效的尺寸

通过测试必应 API 返回的 URL,以下尺寸在多数情况下可正常下载:

  • 720x1280(720p,适用于红米 Note 10)
  • 1080x1920(1080p,iPhone 12/13 系列)
  • 1440x2560(2K,三星 Galaxy S20)
  • 2160x4680(4K 超高清,适用于索尼 Xperia 1 IV)

注意:部分尺寸可能因图片版权或原始素材限制无法获取,此时会返回 404 错误。

四、动态调整尺寸的方法

若需适配任意手机分辨率,可使用以下两种方式:

  1. 根据设备屏幕自动匹配

    import requests
    from PIL import Image
    from io import BytesIO
    
    # 获取原始图片(无尺寸后缀)
    raw_url = f"https://www.bing.com{data['images'][0]['urlbase']}.jpg"
    response = requests.get(raw_url)
    img = Image.open(BytesIO(response.content))
    
    # 调整尺寸为设备分辨率(例如 1080x2340)
    img = img.resize((1080, 2340), Image.Resampling.LANCZOS)
    img.save("custom_size.jpg")
  2. 通过 API 参数强制缩放
    在 URL 中添加 &w=宽度&h=高度(必应会自动保持比例):

    # 强制缩放为 1000x1000(实际尺寸可能为 1000x562)
    wallpaper_url = f"https://www.bing.com{data['images'][0]['urlbase']}_1920x1080.jpg?w=1000&h=1000"

五、兼容性与注意事项

  1. 尺寸优先级

    • 必应优先提供与原图比例最接近的尺寸,例如原图为 16:9 时,指定 1080x2340 可能返回拉伸后的图片。
    • 建议通过 urlbase 拼接尺寸后缀,而非依赖 API 的 resolution 参数。
  2. 市场区域影响

    • 不同地区(如 mkt=zh-CNmkt=en-US)返回的壁纸尺寸可能略有差异。
    • 部分尺寸仅在特定市场可用(如日本市场的 1920x1080 可能更常见)。
  3. 版权与使用限制

    • 必应壁纸的版权归原作者所有,商业使用需获得授权。
    • 禁止修改图片内容或移除水印(如有)。

六、常见问题解决方案

问题描述解决方案
下载的图片尺寸不符检查 URL 后缀是否正确,或尝试使用 urlbase 拼接不同尺寸。
404 错误(尺寸不存在)更换为其他尺寸(如 1920x1080),或尝试使用原图缩放。
图片拉伸/变形确保指定的尺寸与原图比例一致(可通过 data['images'][0]['enddate'] 获取原图尺寸)。

通过以上方法,您可以灵活获取适合不同手机型号的必应壁纸。若需更精准的尺寸适配,建议结合设备的实际分辨率进行调整。

七、常用国家的市场区域代码

国家/地区市场区域代码说明
中国zh-CN适用于中国大陆地区,以中文显示信息,壁纸可能包含中国的自然景观、文化遗产等元素。
美国en-US以英语显示信息,壁纸可能包含美国的标志性建筑、自然风景等内容。
英国en-GB英语(英国)市场,壁纸可能具有英国特色,如伦敦地标、乡村风光等。
日本ja-JP以日语显示信息,壁纸可能会有日本的樱花、富士山、京都古寺等特色元素。
法国fr-FR法语市场,壁纸可能会展现法国的埃菲尔铁塔、普罗旺斯薰衣草田等。
德国de-DE德语市场,壁纸可能包含德国的城堡、啤酒节等元素。
澳大利亚en-AU英语(澳大利亚)市场,壁纸可能会有澳大利亚的悉尼歌剧院、大堡礁等标志性景观。
加拿大(英语)en-CA以英语显示信息,壁纸可能包含加拿大的尼亚加拉瀑布、落基山脉等。
加拿大(法语)fr-CA以法语显示信息,在魁北克等地区可能更常用。

八、完整代码示例(下载 8 张指定尺寸壁纸)

import requests
import os

def get_bing_wallpapers_by_date(start_date_index, count=1, size="1080x1920"):
    """
    根据起始日期索引和数量获取必应壁纸的 URL
    :param start_date_index: 起始日期索引,0 表示今天,1 表示昨天,依此类推
    :param count: 要获取的壁纸数量
    :param size: 壁纸尺寸
    :return: 壁纸 URL 列表
    """
    url = f"https://www.bing.com/HPImageArchive.aspx?format=js&idx={start_date_index}&n={count}&mkt=zh-CN"
    try:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        return [
            f"https://www.bing.com{image['urlbase']}_{size}.jpg"
            for image in data['images']
        ]
    except requests.RequestException as e:
        print(f"请求出错: {e}")
    except (KeyError, IndexError, ValueError):
        print("解析响应数据出错")
    return []

def download_wallpaper(url, save_path):
    """
    下载壁纸
    :param url: 壁纸 URL
    :param save_path: 保存路径
    """
    if url:
        try:
            response = requests.get(url)
            response.raise_for_status()
            with open(save_path, 'wb') as file:
                file.write(response.content)
            print(f"壁纸已成功下载到 {save_path}")
        except requests.RequestException as e:
            print(f"下载出错: {e}")
        except OSError as e:
            print(f"保存文件出错: {e}")

if __name__ == "__main__":
    # 要获取的起始日期索引,例如 0 表示今天,1 表示昨天
    start_date_index = 1
    # 要下载的壁纸数量
    download_count = 3
    # 壁纸尺寸
    wallpaper_size = "1080x1920"
    # 保存壁纸的目录
    save_dir = "bing_wallpapers"
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    wallpaper_urls = get_bing_wallpapers_by_date(start_date_index, download_count, wallpaper_size)
    for i, url in enumerate(wallpaper_urls):
        save_path = os.path.join(save_dir, f"wallpaper_{start_date_index + i}.jpg")
        download_wallpaper(url, save_path)

必应手机壁纸常见的尺寸有哪些?