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

使用Python转换1.3GB DNG为PNG时遇图像过大无法处理问题

解决DNG转PNG时的LibRawTooBigError问题

我需要用Python将DNG文件转换为PNG格式,尝试了以下代码:

# open dng and convert
import rawpy
import imageio
import os

os.chdir(r'C:\Path\to\dir')
path = r'path\to\file'

with rawpy.imread(path) as raw:
    rgb = raw.postprocess()

rgb_img.save('image.png')

运行时出现错误:

line 13, in <module>
    rgb = raw.postprocess()
  File "rawpy\_rawpy.pyx", line 887, in rawpy._rawpy.RawPy.postprocess
  File "rawpy\_rawpy.pyx", line 790, in rawpy._rawpy.RawPy.dcraw_process
  File "rawpy\_rawpy.pyx", line 438, in rawpy._rawpy.RawPy.ensure_unpack
  File "rawpy\_rawpy.pyx", line 432, in rawpy._rawpy.RawPy.unpack
  File "rawpy\_rawpy.pyx", line 936, in rawpy._rawpy.RawPy.handle_error
rawpy._rawpy.LibRawTooBigError: b'Image too big for processing'

请问是否有转换DNG文件的替代方案,或绕过该错误的方法?

以下是ExifTool导出的文件信息:

ExifTool版本号         : 11.88

文件名                       : DSCF0001.DNG

目录                       : .

文件大小                       : 1313 MB

文件修改日期/时间     : 2022:08:24 12:06:31+01:00

文件访问日期/时间           : 2022:08:25 08:17:15+01:00

文件inode修改日期/时间     : 2022:08:24 15:19:04+01:00

文件权限                : rwxrwxrwx

文件类型                       : DNG

文件类型扩展名             : dng

MIME类型                       : image/x-adobe-dng

Exif字节序                 : 小端(Intel, II)

品牌                            : FUJIFILM

相机型号名称               : GFX 100

预览图起始位置             : 115208860

方向                     : 水平(正常)

每条纹行数                  : 3000

预览图长度            : 3011337

软件                        : FUJIFILM Pixel Shift Combiner 1.2.0.2(真实色彩+高分辨率模式)

修改日期                     : 2022:08:24 12:06:29

作者                          : 

子文件类型                    : 全分辨率图像

图像宽度                     : 23296

图像高度                    : 17472

每样本位数                 : 16 16 16

压缩                     : JPEG

光度解释      : 线性Raw

每像素样本数               : 3

平面配置            : 交错

瓦片宽度                      : 128

瓦片长度                     : 96

瓦片偏移量                    : (二进制数据 341026 字节,使用 -b 选项提取)

瓦片字节数                : (二进制数据 198743 字节,使用 -b 选项提取)

黑电平                     : 256 255 256

白电平                     : 65535 65535 65535

默认缩放                   : 1 1

默认裁剪原点             : 16 12

默认裁剪尺寸               : 23264 17448

抗锯齿强度             : 1

最佳质量缩放              : 1

操作码列表3                   : WarpRectilinear, FixVignetteRadial

评级                          : 0

版权                       : 

曝光时间                   : 1/125

光圈值                        : 8.0

曝光程序                : 手动

ISO                             : 100

感光度类型                : 标准输出感光度

标准输出感光度     : 100

Exif版本                    : 0230

原始日期/时间              : 2019:03:10 00:44:16

创建日期                     : 2019:03:10 00:44:16

快门速度值             : 1/125

光圈值                  : 8.0

亮度值                : 8.57

曝光补偿           : 0

最大光圈值              : 2.0

测光模式                   : 多分区测光

光源                    : 未知

闪光灯                           : 未使用闪光灯

焦距                    : 110.0 mm

版本                         : 0130

内部序列号          : 

质量                         : NORMAL

白平衡                   : 自动

饱和度                      : 0(正常)

白平衡微调         : 红色 +0,蓝色 +0

降噪                 : 0(正常)

富士闪光灯模式                 : 手动

闪光曝光补偿             : 0

对焦模式                      : 手动

自动对焦模式                         : 无

对焦像素                     : 2001 1501

AF-S优先级                   : 释放优先

AF-C优先级                   : 释放优先

对焦模式2                    : AF-M

自动对焦区域模式                    : 单点

自动对焦点大小              : n/a

自动对焦区域大小               : n/a

AF-C设置                    : Set 1(多用途)

AF-C跟踪灵敏度       : 2

AF-C速度跟踪灵敏度 : 0

AF-C区域切换        : 自动

慢同步                       : 关闭

照片模式                    : 手动

曝光次数                  : 1

阴影色调                     : 0(正常)

高光色调                  : 0(正常)

镜头调制优化器       : 开启

颗粒效果                    : 关闭

色彩铬效果             : 关闭

裁剪模式                       : n/a

色彩铬FX蓝            : 关闭

快门类型                    : 电子快门

自动包围曝光                 : 未知(6)

序列号                 : 1

驱动模式                      : 单张拍摄

驱动速度                     : n/a

模糊警告                    : 无

对焦警告                   : 良好

曝光警告                : 良好

动态范围                   : 标准

胶片模式                       : F0/标准(Provia)

动态范围设置           : 手动

开发动态范围       : 100

最小焦距                : 110

最大焦距                : 110

最小焦距时最大光圈       : 2

最大焦距时最大光圈       : 2

图像稳定             : 传感器位移;关闭;0

图像生成                : 原始图像

图像计数                     : 34

防闪烁               : 关闭(0x0002)

检测到人脸                  : 0

人脸元素数量               : 0

色彩空间                     : 未校准

焦平面X分辨率        : 5320

焦平面Y分辨率        : 5320

焦平面分辨率单位     : cm

文件来源                     : 数码相机

场景类型                      : 直接拍摄

自定义渲染                 : 正常

曝光模式                   : 自动

等效35mm焦距     : 87 mm

场景捕获类型              : 标准

锐度                       : 未知(3)

拍摄距离范围          : 未知(48)

序列号                   : 

镜头信息                       : 110mm f/2

镜头品牌                       : FUJIFILM

镜头型号                      : GF110mmF2 R LM WR

镜头序列号              : 

DNG版本                     : 1.4.0.0

DNG向后兼容版本            : 1.1.0.0

唯一相机型号             : FUJIFILM GFX 100

色彩矩阵1                  : 1.7191 -1.1 0.1278 -0.3574 1.1733 0.2076 -0.0002 0.0497 0.654

色彩矩阵2                  : 1.6212 -0.8423 -0.1583 -0.4336 1.2583 0.1937 -0.0195 0.0726 0.6199

模拟平衡                  : 1 1 1

拍摄时中性值                 : 0.5644 1 0.5153

基线曝光               : -0.01

基线噪声                  : 1

基线锐度              : 1.33

线性响应极限           : 1

相机序列号            : 

DNG镜头信息                   : 110mm f/2

阴影缩放                    : 1

DNG私有数据                : (二进制数据 114927728 字节,使用 -b 选项提取)

校准光源1        : 标准光源A

校准光源2        : D65

光圈                        : 8.0

图像尺寸                      : 23296x17472

百万像素                      : 407.0

预览图像                   : (二进制数据 3011337 字节,使用 -b 选项提取)

等效35mm缩放因子: 0.8

快门速度                   : 1/125

弥散圆             : 0.038 mm

视角                   : 23.4 deg

焦距                    : 110.0 mm(等效35mm焦距:87.0 mm)

超焦距距离             : 39.81 m

曝光值                     : 13.0

解决方案

1. 调整rawpy参数绕过内存限制

你的图像是407MP的超大尺寸,rawpy默认处理全尺寸会触发LibRaw的内存限制,可以通过以下两种方式调整:

方式A:缩小输出尺寸

在postprocess中指定output_size参数,将图像缩小到可处理的尺寸:

import rawpy
import imageio
import os

os.chdir(r'C:\Path\to\dir')
path = r'path\to\file'

with rawpy.imread(path) as raw:
    # 缩小为原尺寸的1/2,可根据需求调整比例
    rgb = raw.postprocess(output_size=(raw.width // 2, raw.height // 2))

imageio.imwrite('image.png', rgb)

方式B:使用DNG内置的裁剪区域

DNG文件包含默认裁剪信息,启用crop=True可以只处理有效区域,减少内存占用:

import rawpy
import imageio
import os

os.chdir(r'C:\Path\to\dir')
path = r'path\to\file'

with rawpy.imread(path) as raw:
    rgb = raw.postprocess(crop=True)

imageio.imwrite('image.png', rgb)

2. 使用pyvips处理超大图像

pyvips是专为大图像设计的库,采用流式处理,内存占用极低,适合处理407MP这种级别的文件:
首先安装pyvips:

pip install pyvips

然后执行转换:

import pyvips

# 以流式方式读取文件,避免加载整个图像到内存
image = pyvips.Image.new_from_file(path, access='sequential')
# 保存为PNG,支持16位输出
image.write_to_file('image.png')

3. 提取DNG内置预览图(快速需求)

如果不需要全分辨率图像,可以直接提取DNG中的预览图,速度快且内存占用小:

import subprocess

# 调用ExifTool提取预览图,需确保ExifTool已添加到系统PATH
subprocess.run([
    'exiftool', '-b', '-PreviewImage', 
    path, '-o', 'preview.png'
])

4. 使用OpenCV(需编译支持LibRaw)

如果你的OpenCV编译时包含了LibRaw支持,可以直接读取DNG并转换:

import cv2

# 读取16位DNG原始数据
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
# 转换为8位用于PNG兼容(如需保留16位可直接保存)
img_8bit = cv2.convertScaleAbs(img, alpha=(255.0 / 65535.0))
cv2.imwrite('image.png', img_8bit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:54:26