生成命令行版本image-converter

• 5 分钟阅读 • python

本文生成带参数运行的命令行版本image-converter。

提问:如果生成命令行exe程序,带三个参数运行,目录A,目录B,转换方式(png,webp,jpg等,默认webp,可省略),怎么做?

主代码

import os
import sys
import argparse
from PIL import Image

def convert_images(src_dir, dest_dir, output_format='webp'):
    """
    核心转换函数
    :param src_dir: 源目录
    :param dest_dir: 目标目录
    :param output_format: 输出格式 (webp/jpg/png)
    """
    if not os.path.exists(src_dir):
        print(f"错误:源目录不存在 {src_dir}")
        return False

    os.makedirs(dest_dir, exist_ok=True)
    
    supported_formats = ['webp', 'jpg', 'jpeg', 'png']
    if output_format.lower() not in supported_formats:
        print(f"错误:不支持的格式 {output_format}")
        return False

    count = 0
    for filename in os.listdir(src_dir):
        if not filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff', '.webp')):
            continue

        try:
            src_path = os.path.join(src_dir, filename)
            dest_path = os.path.join(dest_dir, f"{os.path.splitext(filename)[0]}.{output_format}")
            
            with Image.open(src_path) as img:
                # 透明背景处理
                if img.mode in ('RGBA', 'LA') and output_format in ('jpg', 'jpeg'):
                    background = Image.new('RGB', img.size, (255, 255, 255))
                    background.paste(img, mask=img.split()[-1])
                    img = background
                
                # 高质量保存参数
                save_args = {}
                if output_format == 'webp':
                    save_args = {'quality': 100, 'method': 6}
                elif output_format in ('jpg', 'jpeg'):
                    save_args = {'quality': 95}
                
                img.save(dest_path, **save_args)
                count += 1
                print(f"转换成功: {filename} -> {os.path.basename(dest_path)}")
                
        except Exception as e:
            print(f"转换失败 {filename}: {str(e)}")
    
    print(f"\n转换完成! 共处理 {count} 个文件")
    return True

def main():
    # 设置命令行参数解析
    parser = argparse.ArgumentParser(
        description="图片格式转换工具 (命令行版)",
        formatter_class=argparse.RawTextHelpFormatter
    )
    parser.add_argument('src_dir', help="源图片目录路径")
    parser.add_argument('dest_dir', help="输出目录路径")
    parser.add_argument('-f', '--format', 
                        choices=['webp', 'jpg', 'png'],
                        default='webp',
                        help="输出格式 (默认: webp)")
    
    # 解析参数
    args = parser.parse_args()
    
    # 执行转换
    convert_images(args.src_dir, args.dest_dir, args.format)

if __name__ == "__main__":
    main()

保存为image_converter_cli.py。

生成exe

pip install pyinstaller pillow
pyinstaller --onefile image_converter_cli.py

生成的 dist/image_converter_cli.exe 文件8.8M。

用法

文章标签: python

上一篇 : 用批处理文件备份hexo博客到本地目录
下一篇 : 用tkinter代替pyqt5重新生成image_converter
留言
阅读进度 0%