Python 基于Rawpy 索尼A73 RAW文件转为JPG功能实现

该Python程序利用Tkinter界面,允许用户选择一个包含RAW图像的文件夹,并自动将所有.arw文件转换为JPG格式。转换过程中,图片会经过锐化和亮度、对比度增强处理。用户界面包括选择文件夹和转换按钮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python课程作业,因为不限方向,而且自己平时不会保存jpg文件,所以写了这个自用的程序,可以实现RAW文件向JPG文件的批量转换。

首先在程序中导入所需要的库,例如:Tkinter、os、rawpy、imageio、numpy和Pillow的Image和ImageTk模块。

然后定义一个convert_image()函数,它接受两个参数:一个输入文件路径和一个输出文件路径。函数使用rawpy库读取RAW格式图像文件,将其转换为numpy数组,然后将numpy数组转换为PIL Image对象。接着,对图像进行一些处理,如锐化和亮度和对比度增强。最后,函数将PIL Image对象转换为numpy数组,并将其保存为JPEG格式图像文件。

然后定义一个convert_folder()函数,它接受一个文件夹路径作为参数。函数使用os模块遍历文件夹中的所有.arw文件,并调用convert_image()函数将它们转换为JPEG格式图像。

然后创建一个Tkinter窗口,并设置窗口的标题和大小。在仓库中创建一个文件选择按钮,用于选择要转换的文件夹。

再创建一个用于显示转换后图像的面板,由于原图的比例是3:2,因此窗口的尺寸为600×400。

创建一个转换按钮,并绑定它的事件,调用convert_folder()函数并传入选择的文件夹路径。最后运行窗口,并且等待用户进行操作。

import tkinter as tk
from tkinter import filedialog
import os
import rawpy
import imageio
import numpy as np
from PIL import Image, ImageEnhance, ImageFilter, ImageTk


def convert_image(file_path, output_path):
    # 使用rawpy打开文件并转换为numpy数组
    with rawpy.imread(file_path) as raw:
        raw_image = raw.postprocess()

    # 转换numpy数组为PIL Image对象
    pil_image = Image.fromarray(raw_image)

    # 对图像进行锐化
    pil_image = pil_image.filter(ImageFilter.SHARPEN)

    # 对图像进行亮度和对比度增强
    enhancer = ImageEnhance.Brightness(pil_image)
    pil_image = enhancer.enhance(1.0)
    enhancer = ImageEnhance.Contrast(pil_image)
    pil_image = enhancer.enhance(1.2)

    # 转换PIL Image对象为numpy数组
    np_image = np.asarray(pil_image)

    # 将numpy数组转换为jpg格式并保存到用户选择的输出路径和文件名
    if output_path:
        imageio.imwrite(output_path, np_image, format='jpg')

    # 在窗口中显示转换后的图像
    img = Image.open(output_path)
    img = img.resize((600, 400))
    img = ImageTk.PhotoImage(img)
    panel.configure(image=img)
    panel.image = img


def convert_folder(folder_path):
    # 循环遍历文件夹中的所有.arw文件,并进行转换
    for file_name in os.listdir(folder_path):
        # 如果文件扩展名不是".arw",则跳过
        if not file_name.lower().endswith('.arw'):
            continue

        # 构造完整的文件路径
        file_path = os.path.join(folder_path, file_name)

        # 构造输出文件路径和文件名
        output_path = os.path.splitext(file_path)[0] + '.jpg'

        # 调用转换函数
        convert_image(file_path, output_path)


# 创建窗口
window = tk.Tk()
window.title("ARW Converter")
window.geometry("500x500")

# 创建文件选择按钮
button = tk.Button(window, text="选择文件夹", command=lambda: convert_folder(filedialog.askdirectory()))
button.pack()

# 创建显示图像的面板
panel = tk.Label(window)
panel.pack()

# 创建转换按钮
convert_button = tk.Button(window, text="转换")
convert_button.pack()

# 绑定转换按钮事件,调用convert_folder函数
convert_button.config(command=lambda: convert_folder(filedialog.askdirectory()))

# 运行窗口
window.mainloop()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值