生成命令行版本image-converter


目录
  1. 1. 主代码
  2. 2. 生成exe
  3. 3. 用法

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

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

主代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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

1
2
pip install pyinstaller pillow
pyinstaller --onefile image_converter_cli.py

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

用法

  • 基本用法(默认转webp)
    image_converter_cli.exe 输入目录 输出目录
  • 指定输出格式
    image_converter_cli.exe 输入目录 输出目录 -f jpg
  • 带空格的路径需要用引号
    image_converter_cli.exe "C:\my photos" "D:\converted" -f png

    在windows上,路径使用 \ 和 / 效果一样,有空格的路径需加引号。