在日常图像处理工作中,TIFF格式因其高质量和支持多页等特性被广泛使用,但也存在文件体积大、兼容性差等问题。本文将介绍如何利用Python的Pillow库批量将TIFF图像转换为更通用的JPG或PNG格式,并提供带图形界面的转换工具。
为什么需要转换TIFF格式?
因为实在太大了,一张照片就占了十几MB。我一共有好几千张。
此外,我还想变成灰度图。对于这样批量的任务,使用那些网页版本的转换器应该是不行的,不得不使用一个批量的脚本。
准备工作
其实主要使用了两个核心库,一个是pillow,一个是tkinter,tkinter是python的内置库。安装pillow即可:
pip install Pillow -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
完整转换代码
import os
from PIL import Image
import tkinter as tk
from tkinter import filedialog, messagebox
def convert_tiff_to_image(input_folder, output_folder, output_format, convert_to_gray):
"""批量转换TIFF文件为指定格式,可选择灰度转换"""
tiff_extensions = ('.tif', '.tiff')
# 收集所有TIFF文件
tiff_files = [
f for f in os.listdir(input_folder)
if os.path.splitext(f)[1].lower() in tiff_extensions
]
if not tiff_files:
messagebox.showwarning("警告", f"在目录中未找到TIFF文件:\n{input_folder}")
return False
# 确保输出目录存在
os.makedirs(output_folder, exist_ok=True)
converted_count = 0
for filename in tiff_files:
input_path = os.path.join(input_folder, filename)
output_name = os.path.splitext(filename)[0] + f'.{output_format}'
output_path = os.path.join(output_folder, output_name)
try:
with Image.open(input_path) as img:
# 转换为灰度(如果需要)
if convert_to_gray:
img = img.convert('L')
# 保存为指定格式
img.save(output_path)
converted_count += 1
except Exception as e:
print(f"转换失败: {filename} - {str(e)}")
return converted_count
def main():
"""主函数:获取用户输入并执行转换"""
root = tk.Tk()
root.withdraw()
# 设置输入文件夹
input_folder = filedialog.askdirectory(title="选择TIFF文件所在文件夹")
if not input_folder:
return
# 设置输出文件夹
output_folder = filedialog.askdirectory(title="选择输出文件夹")
if not output_folder:
return
# 选择输出格式
output_format = tk.simpledialog.askstring(
"输出格式",
"请输入输出格式 (jpg 或 png):",
initialvalue="png"
)
if not output_format or output_format.lower() not in ('jpg', 'png'):
messagebox.showerror("错误", "输出格式必须是 'jpg' 或 'png'")
return
output_format = output_format.lower()
# 选择是否转为灰度
convert_to_gray = messagebox.askyesno("灰度转换", "是否转换为灰度图像? (是/否)")
# 执行转换
converted_count = convert_tiff_to_image(
input_folder, output_folder, output_format, convert_to_gray
)
if converted_count > 0:
messagebox.showinfo(
"完成",
f"成功转换 {converted_count} 个文件!\n输出目录: {output_folder}"
)
else:
messagebox.showwarning("无文件转换", "没有文件被转换")
if __name__ == "__main__":
main()
GUI交互流程
- 第一步:选择包含TIFF的源文件夹
- 第二步:选择输出目录
- 第三步:选择输出格式(JPG/PNG)
- 第四步:选择是否转为灰度图
最后就能再输出文件夹里获得自己想要的新格式图片了。