You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中处理DNG图像后如何将其重新保存为DNG格式?

Python保存DNG格式的实现方案

目前Python生态中rawpy、OpenCV这类常用库确实不支持DNG写入,可通过以下两种可行方案实现需求:

方案1:使用dnglab库(推荐)

dnglab是专门面向RAW/DNG格式处理的Python库,原生支持DNG读写,适配修改原有DNG后回存的场景。

  • 安装命令:pip install dnglab
  • 参考代码示例:
from dnglab import DngFile, RawImage
import numpy as np

# 读取原始DNG文件
with DngFile.open("input.dng") as src_dng:
    # 获取原始拜耳阵列数据
    raw_data = src_dng.raw_image()
    # 此处替换为你的自定义处理逻辑
    processed_raw = np.clip(raw_data * 0.9, 0, 65535).astype(np.uint16)
    # 构造新的RAW图像对象,继承原DNG的CFA排列、元数据等信息
    new_raw = RawImage(
        data=processed_raw,
        cfa_pattern=src_dng.cfa_pattern,
        metadata=src_dng.metadata
    )
    # 保存为新的DNG文件
    DngFile.save("output.dng", new_raw)

方案2:复用原DNG元数据替换RAW块

如果你不想引入新的第三方库,也可以基于原DNG的结构,仅替换RAW数据段实现写入,需要配合exiftool工具完成:

  • 操作步骤:
    1. 用rawpy读取原DNG的拜耳数据、CFA信息、元数据及文件结构
    2. 完成RAW数据处理后,计算新数据的偏移量和字节长度
    3. 通过Python的subprocess模块调用exiftool,将新的RAW数据写入原DNG的对应数据块,覆盖原有内容
  • 示例调用代码:
import subprocess

# 此处仅为示例,实际使用时需要替换为你计算得到的真实参数
subprocess.run(
    [
        "exiftool",
        "-overwrite_original",
        "-StripOffsets=你的新数据偏移量",
        "-StripByteCounts=你的新数据字节长度",
        "output.dng"
    ],
    check=True
)

注意:DNG存储的是未经去马赛克处理的拜耳阵列原始传感器数据,如果你处理后的内容已经是完成去马赛克的RGB图像,存储为DNG没有实际意义,这种场景建议直接存为无损TIFF格式即可。

内容的提问来源于stack exchange,提问作者craaaft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:36:02