尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【Python】批量转换文件夹内的图片为ICO

【Python】批量转换文件夹内的图片为ICO
📅 发布时间:2026/6/20 17:35:26
import os
from PIL import Image
import sysdef convert_folder_to_ico(input_folder, output_folder=None, sizes=None):"""批量转换文件夹内的图片为ICOArgs:input_folder: 输入文件夹路径output_folder: 输出文件夹路径(默认为输入文件夹内的ico_output)sizes: ICO尺寸列表,默认为[16, 32, 48, 64, 128, 256]"""# 支持的图片格式supported_formats = ('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff', '.webp')# 设置默认尺寸if sizes is None:sizes = [16, 32, 48, 64, 128, 256]# 设置输出文件夹if output_folder is None:output_folder = os.path.join(input_folder, 'ico_output')# 创建输出文件夹os.makedirs(output_folder, exist_ok=True)# 统计变量success_count = 0error_count = 0# 遍历文件夹for filename in os.listdir(input_folder):# 检查是否为支持的图片格式if filename.lower().endswith(supported_formats):input_path = os.path.join(input_folder, filename)try:# 打开图片img = Image.open(input_path)# 准备不同尺寸的图片icon_sizes = []for size in sizes:# 兼容不同Pillow版本的重采样方法try:# 新版本写法resized_img = img.resize((size, size), Image.Resampling.LANCZOS)except AttributeError:try:# 较新版本写法resized_img = img.resize((size, size), Image.LANCZOS)except:# 旧版本写法resized_img = img.resize((size, size), Image.ANTIALIAS)icon_sizes.append(resized_img)# 生成输出文件名base_name = os.path.splitext(filename)[0]output_path = os.path.join(output_folder, f"{base_name}.ico")# 保存为ICO(兼容不同版本的保存方式)try:# 新版本保存方式icon_sizes[0].save(output_path,format='ICO',sizes=[(size, size) for size in sizes],append_images=icon_sizes[1:] if len(icon_sizes) > 1 else None)except:# 旧版本保存方式# 如果保存失败,尝试只保存256x256尺寸img_resized = img.resize((256, 256), Image.Resampling.LANCZOS if hasattr(Image,'Resampling') else Image.LANCZOS)img_resized.save(output_path, format='ICO')print(f"✓ 转换成功: {filename} -> {base_name}.ico")success_count += 1except Exception as e:print(f"✗ 转换失败: {filename} - 错误: {str(e)}")error_count += 1import tracebacktraceback.print_exc()  # 打印详细错误信息print(f"\n转换完成!成功: {success_count}个,失败: {error_count}个")print(f"输出文件夹: {output_folder}")# 简化版本,兼容性更好
def convert_folder_to_ico_simple(input_folder, output_folder=None):"""简化版批量转换,兼容性更好"""# 支持的图片格式supported_formats = ('.png', '.jpg', '.jpeg')# 设置输出文件夹if output_folder is None:output_folder = os.path.join(input_folder, 'ico_output')# 创建输出文件夹os.makedirs(output_folder, exist_ok=True)# 统计变量success_count = 0error_count = 0# 遍历文件夹for filename in os.listdir(input_folder):# 检查是否为支持的图片格式if filename.lower().endswith(supported_formats):input_path = os.path.join(input_folder, filename)try:# 打开图片img = Image.open(input_path)# 生成输出文件名base_name = os.path.splitext(filename)[0]output_path = os.path.join(output_folder, f"{base_name}.ico")# 简化:只保存256x256尺寸# 确定重采样方法if hasattr(Image, 'Resampling'):resample_method = Image.Resampling.LANCZOSelif hasattr(Image, 'LANCZOS'):resample_method = Image.LANCZOSelse:resample_method = Image.ANTIALIAS# 调整大小img_resized = img.resize((256, 256), resample_method)# 保存为ICOimg_resized.save(output_path, format='ICO')print(f"✓ 转换成功: {filename} -> {base_name}.ico")success_count += 1except Exception as e:print(f"✗ 转换失败: {filename} - 错误: {str(e)}")error_count += 1print(f"\n转换完成!成功: {success_count}个,失败: {error_count}个")print(f"输出文件夹: {output_folder}")# 增强版:支持多尺寸和格式转换
def convert_folder_to_ico_enhanced(input_folder, output_folder=None, sizes=None):"""增强版批量转换"""# 支持的图片格式supported_formats = ('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff', '.webp')# 设置默认尺寸if sizes is None:sizes = [16, 32, 48, 64, 128, 256]# 设置输出文件夹if output_folder is None:output_folder = os.path.join(input_folder, 'ico_output')# 创建输出文件夹os.makedirs(output_folder, exist_ok=True)# 获取重采样方法def get_resample_method():if hasattr(Image, 'Resampling'):return Image.Resampling.LANCZOSelif hasattr(Image, 'LANCZOS'):return Image.LANCZOSelse:return Image.ANTIALIASresample_method = get_resample_method()# 统计变量success_count = 0error_count = 0# 遍历文件夹for filename in os.listdir(input_folder):# 检查是否为支持的图片格式if filename.lower().endswith(supported_formats):input_path = os.path.join(input_folder, filename)try:# 打开图片with Image.open(input_path) as img:# 如果图片有透明通道,转换为RGBAif img.mode in ('P', 'RGBA'):img = img.convert('RGBA')else:img = img.convert('RGB')# 生成输出文件名base_name = os.path.splitext(filename)[0]output_path = os.path.join(output_folder, f"{base_name}.ico")# 创建不同尺寸的图像images = []for size in sizes:resized = img.resize((size, size), resample_method)images.append(resized)# 保存为ICO# 使用第一个图像作为主图像,附加其他尺寸if len(images) > 0:images[0].save(output_path,format='ICO',append_images=images[1:] if len(images) > 1 else [])print(f"✓ 转换成功: {filename} -> {base_name}.ico")success_count += 1except Exception as e:print(f"✗ 转换失败: {filename} - 错误: {str(e)}")error_count += 1print(f"\n转换完成!成功: {success_count}个,失败: {error_count}个")print(f"输出文件夹: {output_folder}")if __name__ == "__main__":print("批量图片转ICO工具")print("=" * 40)# 获取输入路径if len(sys.argv) > 1:input_path = sys.argv[1]else:input_path = input("请输入图片文件夹路径: ").strip('"').strip("'")if not os.path.exists(input_path):print("错误:文件夹不存在!")sys.exit(1)print("\n选择转换模式:")print("1. 简单模式(快速,单尺寸)")print("2. 标准模式(推荐,多尺寸)")print("3. 增强模式(完整功能)")mode = input("\n请选择模式 (1/2/3, 默认2): ").strip()if mode == "1":convert_folder_to_ico_simple(input_path)elif mode == "3":# 自定义尺寸custom_sizes = input("请输入ICO尺寸(用逗号分隔,如: 16,32,48,64,128,256): ")if custom_sizes:sizes = [int(s.strip()) for s in custom_sizes.split(',')]else:sizes = None# 自定义输出文件夹output_path = input("请输入输出文件夹路径(直接回车使用默认): ").strip('"').strip("'")output_path = output_path if output_path else Noneconvert_folder_to_ico_enhanced(input_path, output_path, sizes)else:convert_folder_to_ico(input_path)

运行结果
image

-------------------------------------------------------------------------------------

如果万事开头难 那请结局一定圆满 @ Phoenixy

-------------------------------------------------------------------------------------

相关新闻

  • 数据分析师的基本功总结
  • Nord调色板国际化色彩应用:构建全球统一视觉体验的专业指南
  • Unity教学 项目2 2D闯关游戏

最新新闻

  • 济南黄金回收靠谱榜:本地人亲测五年以上老店,附实时黄金回收价参考 - 商业快讯早知道
  • 2026年众智商学院软考中级系统集成项目管理工程师WBS工作分解结构怎么学?范围管理核心工具解析 - 众智商学院官方
  • 2026年6月最新万国中国官方售后服务电话及客服中心地址网点 - 亨得利官方服务中心
  • 2026 年驻马店市厨卫屋顶地下室防水修缮三家横向测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 2026 年武汉市厨卫屋顶地下室防水修缮三家横向测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • CANN/GE单算子图构建与Dump接口

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号