import os
import sys
import rawpy
from PIL import Image
import tkinter as tk
from tkinter import filedialog
def convert_cr2_to_png(cr2_path, output_dir):
with rawpy.imread(cr2_path) as raw:
rgb = raw.postprocess()
img = Image.fromarray(rgb)
base = os.path.splitext(os.path.basename(cr2_path))[0]
png_path = os.path.join(output_dir, base + ‘.png’)
img.save(png_path)
print(f”已保存: {png_path}”)
def main():
# 弹出文件/文件夹选择窗口
root = tk.Tk()
root.withdraw()
print(“请选择一个或多个CR2文件,或选择包含CR2文件的文件夹:”)
paths = filedialog.askopenfilenames(title=”选择CR2文件”, filetypes=[(“CR2 files”, “*.cr2”)])
cr2_files = list(paths)
if not cr2_files:
folder = filedialog.askdirectory(title=”选择包含CR2文件的文件夹”)
if not folder:
print(“未选择任何文件或文件夹,程序退出。”)
return
# 文件夹模式,批量添加
for file in os.listdir(folder):
if file.lower().endswith(‘.cr2’):
cr2_files.append(os.path.join(folder, file))
# 选择输出文件夹
print(“请选择PNG输出文件夹:”)
output_dir = filedialog.askdirectory(title=”选择PNG输出文件夹”)
if not output_dir:
print(“未选择输出文件夹,程序退出。”)
return
if not cr2_files:
print(“未找到CR2文件。”)
return
for cr2_file in cr2_files:
try:
convert_cr2_to_png(cr2_file, output_dir)
except Exception as e:
print(f”转换失败: {cr2_file},原因: {e}”)
if __name__ == “__main__”:
main()
发表回复