怎样用脚本批量转换图片为PNG?

wen 实用脚本 2

本文目录导读:

怎样用脚本批量转换图片为PNG?

  1. 方法一:使用Python(跨平台、灵活)
  2. 方法二:使用ImageMagick(命令行,强大)
  3. 方法三:使用FFmpeg(视频帧转PNG)
  4. 方法四:跨平台专用脚本(推荐,带进度条)
  5. 注意事项:

使用Python(跨平台、灵活)

需要安装 Pillow 库:

pip install Pillow

脚本 convert_to_png.py

import os
from pathlib import Path
from PIL import Image
def batch_convert_to_png(input_dir, output_dir=None):
    """
    批量转换图片为PNG格式
    :param input_dir: 输入文件夹路径
    :param output_dir: 输出文件夹路径(默认与输入相同)
    """
    # 如果没指定输出目录,则使用输入目录
    if output_dir is None:
        output_dir = input_dir
    # 确保输出目录存在
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    # 支持的图片格式
    supported_formats = ('.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp')
    converted_count = 0
    for filename in os.listdir(input_dir):
        # 检查文件扩展名
        if filename.lower().endswith(supported_formats):
            input_path = os.path.join(input_dir, filename)
            # 生成输出文件名(替换扩展名为.png)
            output_filename = Path(filename).stem + '.png'
            output_path = os.path.join(output_dir, output_filename)
            try:
                # 打开并转换图片
                with Image.open(input_path) as img:
                    # 如果是RGBA模式(如PNG本身),保留之;否则转换为RGB
                    if img.mode == 'RGBA':
                        img.save(output_path, 'PNG')
                    else:
                        img.convert('RGBA').save(output_path, 'PNG')
                converted_count += 1
                print(f"✓ {filename} -> {output_filename}")
            except Exception as e:
                print(f"✗ 转换 {filename} 失败:{e}")
    print(f"\n完成!共转换 {converted_count} 张图片。")
# 使用示例
if __name__ == "__main__":
    # 替换为您的图片文件夹路径
    input_folder = "./images"        # 输入文件夹
    output_folder = "./output_png"   # 输出文件夹(可选)
    batch_convert_to_png(input_folder, output_folder)

使用方法:

  1. 将脚本保存为 convert_to_png.py
  2. 修改 input_folderoutput_folder 路径
  3. 运行:python convert_to_png.py

使用ImageMagick(命令行,强大)

安装 ImageMagick:

  • Windows: 下载安装包 https://imagemagick.org/script/download.php
  • macOS: brew install imagemagick
  • Linux: sudo apt install imagemagick

批量转换命令(Windows):

@echo off
mkdir output_png 2>nul
for %%f in (*.jpg *.jpeg *.bmp *.gif *.tiff *.webp) do (
    magick convert "%%f" "output_png\%%~nf.png"
    echo 转换完成: %%f
)
pause

批量转换命令(Linux/macOS - Shell):

#!/bin/bash
mkdir -p output_png
for f in *.jpg *.jpeg *.bmp *.gif *.tiff *.webp; do
    [ -f "$f" ] && magick convert "$f" "output_png/${f%.*}.png" && echo "转换完成: $f"
done
echo "全部转换完成!"

或使用更简洁的一行命令:

# Linux/macOS
mogrify -path output_png -format png *.jpg *.jpeg *.bmp
# Windows PowerShell
Get-ChildItem *.jpg,*.jpeg,*.bmp | ForEach-Object { magick convert $_.Name "output_png\$($_.BaseName).png" }

使用FFmpeg(视频帧转PNG)

如果您需要从视频中提取帧并转换为PNG:

# 提取所有帧
ffmpeg -i input.mp4 frames_%04d.png
# 每秒提取1帧
ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png

跨平台专用脚本(推荐,带进度条)

使用Python + tqdm(显示进度条):

pip install Pillow tqdm
import os
from pathlib import Path
from PIL import Image
from tqdm import tqdm
def batch_to_png(input_dir, output_dir=None):
    output_dir = output_dir or input_dir
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    files = [f for f in os.listdir(input_dir) 
             if f.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp'))]
    for file in tqdm(files, desc="转换进度"):
        src = os.path.join(input_dir, file)
        dst = os.path.join(output_dir, Path(file).stem + '.png')
        try:
            img = Image.open(src)
            img.save(dst, 'PNG' if img.mode == 'RGBA' else img.convert('RGBA').save(dst, 'PNG'))
        except Exception as e:
            tqdm.write(f"错误: {file} - {e}")
# 使用
batch_to_png("./图片文件夹", "./输出文件夹")

注意事项:

  1. 保留透明度: 上述脚本会保留PNG自身的透明度,其他格式也会转换为RGBA模式。
  2. 覆盖风险: 如果原文件就是PNG,脚本会重新保存(通常无损)。
  3. 大文件处理: 对于超大图片(如几GB的TIFF),建议分批处理。
  4. 路径问题: 确保路径中没有特殊字符,Windows下注意反斜杠。

选择方法时,Python脚本最适合需要自定义逻辑的场景,ImageMagick适合纯命令行批量操作。

抱歉,评论功能暂时关闭!