You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将ICO图标转换为PNG并正确提取不同尺寸版本?

问题核心原因

直接修改Image对象的size属性无法切换ICO文件内置的多尺寸帧,PIL默认打开ICO时仅加载最大分辨率的图标帧,手动调整size只是对该最大尺寸图片做缩放,不会读取内置的其他独立尺寸资源。
运行前请确保Pillow版本≥9.1.0,旧版本对ICO多帧读取的支持存在缺陷,可执行pip install --upgrade pillow升级

修正后可运行代码

import os
from PIL import Image

# 自动创建输出目录,避免路径不存在报错
os.makedirs('png', exist_ok=True)
directory = r'../Icons/ico'

for filename in os.listdir(directory):
    if not filename.endswith(".ico"):
        continue
    ico_full_path = os.path.join(directory, filename)
    print(f"正在处理:{ico_full_path}")
    with Image.open(ico_full_path) as ico_file:
        # 遍历ICO包含的所有独立尺寸帧
        for frame_index in range(ico_file.n_frames):
            # 切换到对应尺寸的帧
            ico_file.seek(frame_index)
            width, height = ico_file.size
            size_tag = f"{width}x{height}"
            # 构造输出文件名,rstrip避免文件名本身带i/c/o字符被误删
            output_filename = f"{filename.rstrip('.ico')}_{size_tag}.png"
            ico_file.save(os.path.join('png', output_filename))
            print(f"导出完成:{output_filename},尺寸{size_tag}")

关键优化点

  • 用n_frames属性获取ICO内封装的独立图标总数
  • 用seek()方法切换到对应图标帧,直接读取原始尺寸的像素数据,无缩放损耗
  • 新增输出目录自动创建逻辑,无需手动提前建文件夹
  • 优化文件名截取逻辑,避免文件名本身包含i、c、o字符时被错误删除
  • 用上下文管理器自动管理文件资源,降低内存泄漏概率

内容的提问来源于stack exchange,提问作者Kristina K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:27:01