本文目录导读:

使用 Python + Pillow 库
from PIL import Image
import os
# 单文件转换
def convert_image(input_path, output_path, output_format):
"""
转换图片格式
input_path: 输入文件路径
output_path: 输出文件路径
output_format: 输出格式 (如 'PNG', 'JPEG', 'WEBP', 'BMP')
"""
img = Image.open(input_path)
img.save(output_path, format=output_format)
# 批量转换
def batch_convert(input_dir, output_dir, target_format):
"""批量转换文件夹内所有图片"""
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.webp')):
input_path = os.path.join(input_dir, filename)
# 修改扩展名
output_filename = os.path.splitext(filename)[0] + f'.{target_format.lower()}'
output_path = os.path.join(output_dir, output_filename)
try:
img = Image.open(input_path)
img.save(output_path, format=target_format)
print(f"转换成功: {filename} -> {output_filename}")
except Exception as e:
print(f"转换失败: {filename}, 错误: {e}")
# 使用示例
if __name__ == "__main__":
# 单文件转换
convert_image('input.jpg', 'output.png', 'PNG')
# 批量转换
batch_convert('./images', './converted', 'PNG')
使用 OpenCV
import cv2
import os
def convert_with_opencv(input_path, output_path):
"""
使用OpenCV转换图片格式
支持: jpg, png, bmp, webp等
"""
# 读取图片
img = cv2.imread(input_path)
if img is None:
print(f"无法读取图片: {input_path}")
return False
# 保存为指定格式
success = cv2.imwrite(output_path, img)
return success
# 批量转换
def batch_convert_opencv(input_dir, output_dir, target_ext='.png'):
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir,
os.path.splitext(filename)[0] + target_ext)
if convert_with_opencv(input_path, output_path):
print(f"转换成功: {filename}")
else:
print(f"转换失败: {filename}")
使用 ImageMagick (命令行工具)
# 安装 ImageMagick # macOS: brew install imagemagick # Ubuntu: sudo apt-get install imagemagick # 单文件转换 convert input.jpg output.png # 批量转换(将所有jpg转为png) mogrify -format png *.jpg # 转换并指定质量 convert input.jpg -quality 90 output.webp
Shell 脚本(Linux/macOS)
#!/bin/bash
# 批量转换脚本
# 用法: ./convert_images.sh input_dir output_dir output_format
INPUT_DIR="${1:-./images}"
OUTPUT_DIR="${2:-./converted}"
FORMAT="${3:-png}"
mkdir -p "$OUTPUT_DIR"
for file in "$INPUT_DIR"/*.{jpg,png,jpeg,bmp,webp}; do
if [ -f "$file" ]; then
filename=$(basename "$file")
name="${filename%.*}"
# 使用 ImageMagick 转换
convert "$file" "$OUTPUT_DIR/$name.$FORMAT"
echo "转换完成: $filename -> $name.$FORMAT"
fi
done
常用格式对比
| 格式 | 特点 | 适用场景 |
|---|---|---|
| JPEG | 有损压缩,文件小 | 照片、复杂图像 |
| PNG | 无损压缩,支持透明 | 图标、截图、UI元素 |
| WEBP | Google开发,压缩率高 | 网页图片 |
| BMP | 无压缩,文件大 | 需要高精度的场景 |
| GIF | 支持动画,256色 | 简单动画、图标 |
安装依赖
# Python依赖 pip install pillow # 或 pip install opencv-python # ImageMagick (如果使用命令行工具) # macOS brew install imagemagick # Ubuntu/Debian sudo apt-get install imagemagick
选择哪种方法取决于你的具体需求:
- 简单转换:使用 ImageMagick 命令行
- 需要编程控制:使用 Python + Pillow
- 需要图像处理:使用 OpenCV