Add support for converting JXL to other formats master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 22 Feb 2026 20:04:54 +0000 (22:04 +0200)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 22 Feb 2026 20:04:54 +0000 (22:04 +0200)
src/main/java/eu/svjatoslav/meviz/encoder/FormatsRegistry.java
src/main/java/eu/svjatoslav/meviz/encoder/converters/JxlDecoder.java [new file with mode: 0644]

index 4421846..1bb1c63 100755 (executable)
@@ -24,6 +24,7 @@ public class FormatsRegistry {
         registerEncoder(new Convert());
         registerEncoder(new WebpEncoder());
         registerEncoder(new WebpDecoder());
+        registerEncoder(new JxlDecoder());
 
         // image to text (OCR)
         registerEncoder(new Ocr());
diff --git a/src/main/java/eu/svjatoslav/meviz/encoder/converters/JxlDecoder.java b/src/main/java/eu/svjatoslav/meviz/encoder/converters/JxlDecoder.java
new file mode 100644 (file)
index 0000000..b5b7a0d
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Meviz - Various tools collection to work with multimedia. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ */
+
+package eu.svjatoslav.meviz.encoder.converters;
+
+import eu.svjatoslav.meviz.encoder.EncodingOptions;
+
+import java.io.File;
+import java.util.List;
+
+public class JxlDecoder extends AbstractConverter {
+
+    @Override
+    public String getCommand(final File inputFile, final File targetFile,
+                             final EncodingOptions options, String targetFormat) {
+        if ("jpg".equals(targetFormat) || "jpeg".equals(targetFormat)) {
+            return "tmp=$(mktemp /tmp/meviz_jxl_XXXXXX.png) && " +
+                    "djxl \"" + inputFile.getAbsolutePath() + "\" \"$tmp\" && " +
+                    "convert \"$tmp\" \"" + targetFile.getAbsolutePath() + "\" && " +
+                    "rm -f \"$tmp\"";
+        }
+        return "djxl \"" + inputFile.getAbsolutePath() + "\" \"" +
+                targetFile.getAbsolutePath() + "\"";
+    }
+
+    @Override
+    public List<String> getTargetFileExtensions() {
+        return toList("png", "jpg", "jpeg");
+    }
+
+    @Override
+    public List<String> getSourceFileExtensions() {
+        return toList("jxl");
+    }
+
+    @Override
+    public boolean isTerminalMandatory() {
+        return false;
+    }
+}