¿Qué es un archivo EXR?

Un archivo EXR es una imagen de alto rango dinámico almacenada en el formato OpenEXR: uno o más canales con nombre que contienen muestras de punto flotante de 16 bits o 32 bits, o de enteros sin signo de 32 bits, además de atributos de encabezado que los describen. Los datos de píxeles pueden estar sin comprimir o usar uno de varios métodos de compresión con o sin pérdida.

Cómo funcionan los archivos EXR

Un archivo OpenEXR comienza con un número mágico de cuatro bytes (76 2f 31 01) y un campo de versión cuyos bits de bandera indican un archivo de una sola parte dividido en mosaicos, un archivo de varias partes o la presencia de datos profundos. La bandera de mosaicos solo se activa para una imagen de una sola parte dividida en mosaicos; en archivos de varias partes y de datos profundos, el atributo type de cada parte indica si contiene líneas de barrido o mosaicos. A continuación aparece un encabezado de atributos con nombre, uno por parte; channels, compression, dataWindow, displayWindow, lineOrder, pixelAspectRatio, screenWindowCenter y screenWindowWidth son obligatorios en todos los encabezados. Los píxeles se almacenan en fragmentos, ya sean bloques de líneas de barrido o mosaicos, que se localizan mediante una tabla de desplazamientos. Solo los archivos divididos en mosaicos pueden contener varios niveles de resolución (mipmaps o ripmaps); un archivo de líneas de barrido contiene uno. Desde OpenEXR 2.0, un archivo puede contener varias partes independientes y datos profundos, en los que cada píxel contiene una lista de muestras de longitud variable. Por convención, los canales de color se premultiplican por alfa. En producción, un EXR suele contener fotogramas renderizados o compuestos que se transforman posteriormente para su visualización.

Datos clave

  1. No supongas que se trata de una única imagen RGBA. Cada canal declara su propio nombre y tipo: HALF (punto flotante de 16 bits) para datos de imagen habituales, FLOAT (de 32 bits) cuando se necesita mayor rango o precisión, como en la profundidad, y UINT (de 32 bits) para valores discretos, como los IDs de objetos. Solo unos pocos nombres, como R, G, B y A, tienen un significado predefinido; las capas son una convención de nombres como light1.specular.R, y un archivo de varias partes añade partes con nombres independientes. Hay que indicar a un convertidor cuáles de estos canales, capas y partes formarán la imagen de salida, o el propio convertidor debe elegirlos.
  2. El tamaño de la imagen se obtiene de dos rectángulos, no de uno. La ventana de visualización es el encuadre previsto; la ventana de datos es la región que realmente contiene píxeles y puede ser más pequeña (una región de interés renderizada) o más grande (un área de overscan conservada para desenfoques o sacudidas de cámara). Cada ventana se define mediante las coordenadas de los píxeles de sus esquinas, por lo que una ventana de visualización de (0, 0) a (1919, 1079) mide 1920 por 1080. La documentación de OpenEXR indica que los píxeles situados fuera de la ventana de visualización normalmente no se muestran y que un visor rellena con un color predeterminado el área de visualización que queda fuera de la ventana de datos. El software que determina el tamaño de su salida únicamente a partir de la ventana de datos asigna dimensiones o posiciones incorrectas a esos archivos.
  3. Que la compresión sea sin pérdida depende del método y, a veces, del tipo de canal. El atributo compression del encabezado se aplica a todos sus canales, por lo que el método debe ser aceptable para cada tipo de canal almacenado en conjunto. PIZ, ZIP, ZIPS y RLE son sin pérdida. PXR24 conserva exactamente los canales HALF y UINT, pero redondea los datos FLOAT a 24 bits. B44 y B44A son con pérdida para los canales HALF y dejan sin comprimir los canales UINT y FLOAT. DWAA y DWAB son métodos con pérdida basados en DCT para datos RGB. Los datos profundos solo permiten datos sin comprimir, RLE, ZIPS o ZIP. La documentación actual también enumera métodos más recientes: HTJ2K256 y HTJ2K32 (sin pérdida, High-Throughput JPEG 2000), LJ2K (con pérdida) y ZSTD (sin pérdida). Confirma que todos los lectores del pipeline sean compatibles con el método que uses al escribir.
  4. Por convención, los valores RGB son lineales respecto a la luz de la escena, y 1,0 no es un límite de recorte. La convención de OpenEXR sitúa el gris medio en 0,18, y los objetos brillantes, como el fuego y los reflejos, superan legítimamente 1,0, por lo que mostrar una imagen así requiere al menos una corrección gamma y, a menudo, un mapeo de tonos. Es una convención, no una garantía: la documentación indica que se supone que las imágenes son lineales y que la biblioteca no exige que el espacio de color declarado sea lineal. Es posible que el archivo tampoco indique de forma fiable qué primarios RGB utiliza: la documentación señala que se ha perdido la confianza en el atributo chromaticities, que la ausencia de colorInteropID no implica un espacio Rec. 709 lineal y que colorInteropID, nuevo en OpenEXR 3.4, es ahora el identificador recomendado. Acuerda el espacio de color, incluido si los valores son lineales, con quien haya producido los archivos, en lugar de inferirlo.

Cuándo son importantes los archivos EXR

Los pipelines de efectos visuales eligen EXR para la composición con luz lineal, las pasadas de renderizado y los archivos intermedios de alta precisión. Es un formato de trabajo: por convención, sus valores de color describen la luz de la escena, no una señal de pantalla, por lo que producir una versión derivada que se pueda visualizar requiere una transformación de color deliberada y una decisión sobre qué canales, parte y ventana utilizar.

Cómo te ayuda Transloadit con los archivos EXR

La tabla de formatos de imagen de Transloadit, que abarca Robots basados en ImageMagick como /image/resize, incluye EXR como un formato que esos Robots pueden leer y escribir. La fila indica la versión de la biblioteca OpenEXR incluida en la compilación de ImageMagick, lo que delimita los métodos de compresión y los atributos que esa compilación puede reconocer.

La tabla indica qué puede leer y escribir la compilación de ImageMagick. No documenta qué canales, parte, ventana o transformación de color utiliza una conversión. Procesa un archivo representativo de producción con tu Assembly e inspecciona el resultado antes de depender de ese comportamiento.

Explora los formatos de archivo y las capacidades de compresión de Transloadit

Fuentes

Convierte tus conocimientos sobre multimedia en un pipeline funcional

Conecta las subidas, el procesamiento, la IA, el almacenamiento y la entrega mediante una sola API declarativa, mientras nos encargamos por ti del stack de encoding, el escalado y los cambios constantes de formatos.

Prueba Transloadit gratis