From a0a25b5fe6ceffe44b0e78d6ca98a8ed89ab9a41 Mon Sep 17 00:00:00 2001 From: Todica Ionut Date: Mon, 17 Aug 2026 11:52:22 +0300 Subject: [PATCH 1/3] exrinput.cpp HTJ2K Signed-off-by: Todica Ionut --- src/openexr.imageio/exrinput.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openexr.imageio/exrinput.cpp b/src/openexr.imageio/exrinput.cpp index ac770dafa2..7339c8c1a0 100644 --- a/src/openexr.imageio/exrinput.cpp +++ b/src/openexr.imageio/exrinput.cpp @@ -450,6 +450,9 @@ OpenEXRInput::PartInfo::parse_header(OpenEXRInput* in, #endif #ifdef IMF_HTJ2K32_COMPRESSION case Imf::HTJ2K32_COMPRESSION: comp = "htj2k32"; break; +#endif +#ifdef IMF_HTJ2KL256_COMPRESSION + case Imf::HTJ2KL256_COMPRESSION: comp = "htj2kl256"; break; #endif default: break; } From d6f6750cb420043010449bfddaac6d53a8ece1ae Mon Sep 17 00:00:00 2001 From: Todica Ionut Date: Mon, 17 Aug 2026 11:54:21 +0300 Subject: [PATCH 2/3] exrinput_c.cpp HTJ2K Signed-off-by: Todica Ionut --- src/openexr.imageio/exrinput_c.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openexr.imageio/exrinput_c.cpp b/src/openexr.imageio/exrinput_c.cpp index 3c13b07f7c..953d1b1496 100644 --- a/src/openexr.imageio/exrinput_c.cpp +++ b/src/openexr.imageio/exrinput_c.cpp @@ -576,6 +576,9 @@ OpenEXRCoreInput::PartInfo::parse_header(OpenEXRCoreInput* in, #endif #ifdef IMF_HTJ2K32_COMPRESSION case EXR_COMPRESSION_HTJ2K32: comp = "htj2k32"; break; +#endif +#ifdef IMF_HTJ2KL256_COMPRESSION + case EXR_COMPRESSION_HTJ2KL256: comp = "htj2kl256"; break; #endif default: break; } From 8cb9bda96f7574bf82c717d8cccc79103b5e3027 Mon Sep 17 00:00:00 2001 From: Todica Ionut Date: Mon, 17 Aug 2026 12:05:02 +0300 Subject: [PATCH 3/3] exroutput.cpp HTJ2K Signed-off-by: Todica Ionut --- src/openexr.imageio/exroutput.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/openexr.imageio/exroutput.cpp b/src/openexr.imageio/exroutput.cpp index 3b3c29ffaa..b915105893 100644 --- a/src/openexr.imageio/exroutput.cpp +++ b/src/openexr.imageio/exroutput.cpp @@ -951,6 +951,14 @@ OpenEXROutput::spec_to_header(ImageSpec& spec, int subimage, header.zipCompressionLevel() = (qual >= 1 && qual <= 9) ? qual : 4; } #endif + if (Strutil::istarts_with(comp, "htj2k") && qual > 110) { +#if OPENEXR_CODED_VERSION >= 30500 + // OpenEXR 3.5.0 and later have an API for setting the quality level + // in the Header object. Older ones do it by setting an attribute, as + // below. + header.lossyHTJ2KQuality() = float(qual); +#endif + ================ if (Strutil::istarts_with(comp, "dwa") && qual > 0) { #if OPENEXR_CODED_VERSION >= 30103 // OpenEXR 3.1.3 and later have an API for setting the quality level @@ -1204,6 +1212,10 @@ OpenEXROutput::put_parameter(const std::string& name, TypeDesc type, #ifdef IMF_HTJ2K32_COMPRESSION else if (Strutil::iequals(str, "htj2k32")) header.compression() = Imf::HTJ2K32_COMPRESSION; +#endif +#ifdef HTJ2KL256_COMPRESSION + else if (Strutil::iequals(str, "htj2kl256")) + header.compression() = Imf::HTJ2KL256_COMPRESSION; #endif } return true;