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

Blender中纯Python读写编辑多层EXR文件的实现方案

在Blender中用纯Python读写并编辑多层EXR(支持Zip压缩)

由于Blender自带的图像API无法直接访问已加载多层EXR的图层像素,且无法编译依赖C扩展的OpenEXR库,以下是基于纯Python库的解决方案,满足读写、图层编辑及Zip压缩需求:

1. 安装纯Python EXR处理库

选择simpleexr——纯Python实现、无需编译、支持多层EXR读写及Zip压缩。在Blender的Scripting窗口执行以下代码完成安装:

import subprocess
import sys

subprocess.check_call([sys.executable, "-m", "pip", "install", "simpleexr"])

如果处于离线环境,可提前下载simpleexr的whl包,手动放入Blender Python环境的site-packages目录。

2. 读取多层EXR文件

直接读取文件并获取所有图层数据:

import simpleexr

# 读取支持Zip压缩的多层EXR
exr_data = simpleexr.read("path/to/your/input.exr")

# 查看所有可用图层通道
print("已读取图层通道:", list(exr_data.channels.keys()))

3. 编辑图层像素

可直接修改现有图层像素,或添加新图层:

# 示例:修改Diffuse图层亮度
if "Diffuse.R" in exr_data.channels:
    # 获取RGB通道的像素数组(numpy格式)
    r_channel = exr_data.channels["Diffuse.R"]
    g_channel = exr_data.channels["Diffuse.G"]
    b_channel = exr_data.channels["Diffuse.B"]
    
    # 将亮度减半
    r_channel *= 0.5
    g_channel *= 0.5
    b_channel *= 0.5

# 示例:添加新的自定义图层
exr_data.channels["CustomLayer.R"] = r_channel.copy()
exr_data.channels["CustomLayer.G"] = g_channel.copy()
exr_data.channels["CustomLayer.B"] = b_channel.copy()

4. 保存为Zip压缩的多层EXR

指定压缩方式后保存编辑后的文件:

# 保存为Zip压缩的多层EXR
simpleexr.write(
    "path/to/your/output.exr",
    exr_data.channels,
    compression=simpleexr.Compression.ZIP
)

注意事项

  • 纯Python库处理大尺寸EXR时,速度会略慢于C扩展库,但完全满足纯Python环境要求
  • 确保文件路径正确,Blender对文件系统的访问权限需符合系统要求
  • 若simpleexr无法满足特定需求,可替换为pureexr(另一纯Python EXR库),用法逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:15:53