From 3bf757230a6b5e83dfa95d12601b8e840668fa84 Mon Sep 17 00:00:00 2001 From: GeonHwan Cha Date: Thu, 19 Feb 2026 18:07:21 +0900 Subject: [PATCH 1/3] fix(bindings): update tests now that JXL encoding is supported MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Python: test_jxl_cannot_encode → test_jxl_can_encode - Python: test_jxl_encode_raises → test_to_jxl (verify encode works) - Kotlin: formatCanEncode returns true for all formats including JXL --- .../kotlin/src/test/kotlin/io/clroot/slimg/SlimgTest.kt | 4 ++-- bindings/python/tests/test_convert.py | 7 ++++--- bindings/python/tests/test_format.py | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bindings/kotlin/src/test/kotlin/io/clroot/slimg/SlimgTest.kt b/bindings/kotlin/src/test/kotlin/io/clroot/slimg/SlimgTest.kt index 4257326..0e4a96a 100644 --- a/bindings/kotlin/src/test/kotlin/io/clroot/slimg/SlimgTest.kt +++ b/bindings/kotlin/src/test/kotlin/io/clroot/slimg/SlimgTest.kt @@ -48,12 +48,12 @@ class SlimgTest { } @Test - fun `formatCanEncode returns false only for JXL`() { + fun `formatCanEncode returns true for all formats`() { assertTrue(formatCanEncode(Format.JPEG)) assertTrue(formatCanEncode(Format.PNG)) assertTrue(formatCanEncode(Format.WEB_P)) assertTrue(formatCanEncode(Format.AVIF)) - assertFalse(formatCanEncode(Format.JXL)) + assertTrue(formatCanEncode(Format.JXL)) assertTrue(formatCanEncode(Format.QOI)) } diff --git a/bindings/python/tests/test_convert.py b/bindings/python/tests/test_convert.py index 5d0c09a..702d23b 100644 --- a/bindings/python/tests/test_convert.py +++ b/bindings/python/tests/test_convert.py @@ -47,9 +47,10 @@ def test_format_enum_accepted(self, sample_image): result = slimg.convert(sample_image, format=slimg.Format.PNG, quality=80) assert result.format == slimg.Format.PNG - def test_jxl_encode_raises(self, sample_image): - with pytest.raises(slimg.SlimgError): - slimg.convert(sample_image, format="jxl", quality=80) + def test_to_jxl(self, sample_image): + result = slimg.convert(sample_image, format="jxl", quality=80) + assert result.format == slimg.Format.JXL + assert len(result.data) > 0 def test_full_pipeline_crop_extend(self, sample_image_100): result = slimg.convert( diff --git a/bindings/python/tests/test_format.py b/bindings/python/tests/test_format.py index 5141780..03f7cba 100644 --- a/bindings/python/tests/test_format.py +++ b/bindings/python/tests/test_format.py @@ -32,8 +32,8 @@ def test_png_can_encode(self): def test_webp_can_encode(self): assert slimg.Format.WEBP.can_encode is True - def test_jxl_cannot_encode(self): - assert slimg.Format.JXL.can_encode is False + def test_jxl_can_encode(self): + assert slimg.Format.JXL.can_encode is True class TestFormatFromPath: From 53e91a1debb64e45e187e0940b25d9324887033a Mon Sep 17 00:00:00 2001 From: GeonHwan Cha Date: Thu, 19 Feb 2026 18:22:13 +0900 Subject: [PATCH 2/3] fix(libjxl-sys): force Release cmake profile on all build modes Vendored cmake build inherits Rust's profile by default. On Windows debug builds, this causes _CrtDbgReport unresolved symbol errors because libjxl's assert macros reference debug CRT functions that Rust doesn't link. --- crates/libjxl-sys/build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/libjxl-sys/build.rs b/crates/libjxl-sys/build.rs index ca33c10..94e0299 100644 --- a/crates/libjxl-sys/build.rs +++ b/crates/libjxl-sys/build.rs @@ -42,6 +42,7 @@ fn main() { #[cfg(feature = "vendored")] fn build_vendored() { let dst = cmake::Config::new("libjxl") + .profile("Release") .define("BUILD_TESTING", "OFF") .define("BUILD_SHARED_LIBS", "OFF") .define("JPEGXL_ENABLE_TOOLS", "OFF") From 6c5c6fa1b05b5c1e9b99427c47b6a927bcbb3476 Mon Sep 17 00:00:00 2001 From: GeonHwan Cha Date: Thu, 19 Feb 2026 18:46:50 +0900 Subject: [PATCH 3/3] chore: bump version to 0.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cli (slimg): 0.4.0 → 0.5.0 - slimg-core: 0.4.0 → 0.5.0 - slimg-ffi: 0.4.0 → 0.5.0 - Python (slimg): 0.4.0 → 0.5.0 - Kotlin (slimg): 0.4.0 → 0.5.0 - slimg-libjxl-sys: 0.1.0 (unchanged, separate versioning) --- Cargo.lock | 6 +++--- bindings/kotlin/gradle.properties | 2 +- bindings/python/pyproject.toml | 2 +- cli/Cargo.toml | 4 ++-- crates/slimg-core/Cargo.toml | 2 +- crates/slimg-ffi/Cargo.toml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 87ced8c..31f0521 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1836,7 +1836,7 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slimg" -version = "0.4.0" +version = "0.5.0" dependencies = [ "anyhow", "clap", @@ -1849,7 +1849,7 @@ dependencies = [ [[package]] name = "slimg-core" -version = "0.4.0" +version = "0.5.0" dependencies = [ "criterion", "image", @@ -1866,7 +1866,7 @@ dependencies = [ [[package]] name = "slimg-ffi" -version = "0.4.0" +version = "0.5.0" dependencies = [ "slimg-core", "thiserror", diff --git a/bindings/kotlin/gradle.properties b/bindings/kotlin/gradle.properties index e6b14db..d307444 100644 --- a/bindings/kotlin/gradle.properties +++ b/bindings/kotlin/gradle.properties @@ -1,3 +1,3 @@ group=io.clroot.slimg -version=0.4.0 +version=0.5.0 kotlin.code.style=official diff --git a/bindings/python/pyproject.toml b/bindings/python/pyproject.toml index 1daea50..6899434 100644 --- a/bindings/python/pyproject.toml +++ b/bindings/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "slimg" -version = "0.4.0" +version = "0.5.0" requires-python = ">=3.9" description = "Fast image optimization library powered by Rust" readme = "README.md" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 6e67018..13cd5fa 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slimg" -version = "0.4.0" +version = "0.5.0" edition = "2024" license = "MIT" description = "Image optimization CLI — convert, compress, and resize images using MozJPEG, OxiPNG, WebP, AVIF, and QOI" @@ -11,7 +11,7 @@ keywords = ["image", "optimization", "cli", "compression", "webp"] categories = ["multimedia::images", "command-line-utilities"] [dependencies] -slimg-core = { version = "0.4.0", path = "../crates/slimg-core" } +slimg-core = { version = "0.5.0", path = "../crates/slimg-core" } clap = { version = "4.5", features = ["derive"] } clap_complete = "4.5" anyhow = "1" diff --git a/crates/slimg-core/Cargo.toml b/crates/slimg-core/Cargo.toml index 35e4a96..ebba2da 100644 --- a/crates/slimg-core/Cargo.toml +++ b/crates/slimg-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slimg-core" -version = "0.4.0" +version = "0.5.0" edition = "2024" license = "MIT" description = "Image optimization library — encode, decode, convert, resize with MozJPEG, OxiPNG, WebP, AVIF, and QOI" diff --git a/crates/slimg-ffi/Cargo.toml b/crates/slimg-ffi/Cargo.toml index 101e123..d7353f8 100644 --- a/crates/slimg-ffi/Cargo.toml +++ b/crates/slimg-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slimg-ffi" -version = "0.4.0" +version = "0.5.0" edition = "2024" license = "MIT" description = "UniFFI bindings for slimg-core image optimization library"