- 设备:iPhone 14 Pro Max
- 拍摄的图片显示过暗
- 原始图片格式:dng
- 转换为:png
- 原因:RAW文件有一个自动曝光参数,这个参数控制着整张图片的曝光度。
- 代码:
import rawpy
import imageio
import os
import numpy as np
def convert_dng_to_png(dng_path, png_path):
with rawpy.imread(dng_path) as raw:
# 使用自定义的参数进行后处理
rgb = raw.postprocess(
no_auto_bright=False, # 开启自动亮度
user_wb=None, # 使用摄像机的白平衡设置
output_bps=16, # 输出16位深度
output_color=rawpy.ColorSpace.sRGB, # 使用 sRGB 色彩空间
use_camera_wb=True, # 使用摄像机的白平衡
use_auto_wb=False, # 不使用自动白平衡
user_sat=None, # 不应用饱和度调整
gamma=(1, 1), # 使用线性伽马
half_size=False # 保持原始分辨率
)
# 调整亮度
rgb = np.clip(rgb, 0, 65535).astype(np.uint16)
# 将16位的RGB值转换为8位
rgb8 = (rgb / 256.0).astype('uint8')
imageio.imsave(png_path, rgb8)
def batch_convert(folder_path):
# 确保输出文件夹存在
output_folder = os.path.join(folder_path, 'converted_pngs')
os.makedirs(output_folder, exist_ok=True)
# 获取文件夹内所有的 DNG 文件
dng_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.dng')]
for dng_file in dng_files:
dng_path = os.path.join(folder_path, dng_file)
png_path = os.path.join(output_folder, os.path.splitext(dng_file)[0] + '.png')
print(f"Converting {dng_file} to PNG...")
convert_dng_to_png(dng_path, png_path)
print(f"{dng_file} converted!")
print("All DNG files have been converted to PNG!")
if __name__ == "__main__":
folder_path = input("Enter the path of the folder containing DNG files: ")
batch_convert(folder_path)