Skip to content

Commit 7ad6c9f

Browse files
committed
Add JPEG XL file format support
Introduces JPEG XL as a selectable file format throughout the UI, settings, and processing logic. Updates file format handling, extension mapping, and compression attributes to support JPEG XL, and adjusts related format indices and lists.
1 parent 365ec86 commit 7ad6c9f

File tree

6 files changed

+23
-8
lines changed

6 files changed

+23
-8
lines changed

Solidify/src/UI.CPP

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ MainWindow::MainWindow() {
186186
frmt_Jpg = createAction("JPEG", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 3));
187187
frmt_Jp2 = createAction("JPEG-2000", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 4));
188188
frmt_Hic = createAction("HEIC", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 5));
189-
frmt_Ppm = createAction("PPM", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 6));
189+
frmt_Jxl = createAction("JPEGXL", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 6));
190+
frmt_Ppm = createAction("PPM", FrmtGroup, fmt_submenu, true, (settings.fileFormat == 7));
190191

191192
// Bits Depth
192193
bit_orig = createAction("Original", BitsGroup, bit_submenu, true, (settings.bitDepth == -1));
@@ -253,7 +254,7 @@ MainWindow::MainWindow() {
253254
for (QAction* action : rng_act) {
254255
connect(action, &QAction::triggered, this, &MainWindow::rngSettings);
255256
}
256-
QList<QAction*> format_act = { frmt_Org, frmt_Tif, frmt_Exr, frmt_Png, frmt_Jpg, frmt_Jp2, frmt_Hic, frmt_Ppm };
257+
QList<QAction*> format_act = { frmt_Org, frmt_Tif, frmt_Exr, frmt_Png, frmt_Jpg, frmt_Jp2, frmt_Hic, frmt_Jxl, frmt_Ppm };
257258
for (QAction* action : format_act) {
258259
connect(action, &QAction::triggered, this, &MainWindow::frmtSettings);
259260
}
@@ -360,8 +361,13 @@ void MainWindow::frmtSettings() {
360361
emit updateTextSignal("File format set to HEIC");
361362
qDebug() << "File format set to HEIC";
362363
}
363-
else if (action == frmt_Ppm) {
364+
else if (action == frmt_Jxl) {
364365
settings.fileFormat = 6;
366+
emit updateTextSignal("File format set to JPEG XL");
367+
qDebug() << "File format set to JPEG XL";
368+
}
369+
else if (action == frmt_Ppm) {
370+
settings.fileFormat = 7;
365371
emit updateTextSignal("File format set to PPM");
366372
qDebug() << "File format set to PPM";
367373
}

Solidify/src/processing.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ QString getExtension(const QString& fileName, Settings* settings) {
8686
return ".jp2";
8787
case 5:
8888
return ".heic";
89-
case 6:
89+
case 6:
90+
return ".jxl";
91+
case 7:
9092
return ".ppm";
9193
}
9294
getWritableExt(&extension, settings);

Solidify/src/settings.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ bool loadSettings(Settings& settings, const std::string& filename) {
119119
}
120120
if (!check("Export", "FileFormat")) return false;
121121
settings.fileFormat = parsed["Export"]["FileFormat"].as_integer();
122-
if (settings.fileFormat < -1 || settings.fileFormat > 6) {
122+
if (settings.fileFormat < -1 || settings.fileFormat > 7) {
123123
spdlog::error("Error parsing settings file: [Export] section: \"FileFormat\" key value is out of range.");
124124
return false;
125125
}
@@ -195,7 +195,11 @@ void printSettings(Settings& settings) {
195195
return QString("JPEG");
196196
case 4:
197197
return QString("JPEG-2000");
198-
case 5:
198+
case 5:
199+
return QString("HEIC");
200+
case 6:
201+
return QString("JPEG XL");
202+
case 7:
199203
return QString("PPM");
200204
default:
201205
return QString("Same as input");

Solidify/src/settings.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ struct Settings {
5656
repairMode = 0; // Repair mode: 0 - disabled, 1 - Z, 2 - Y, 3 - X, 4 - -Z, 5 - -Y, 6 - -X
5757

5858
rangeMode = 0; // Float type: 0 - unsigned, 1 - signed, 2 - unsigned -> signed, 3 - signed -> unsigned
59-
fileFormat = -1; // File format: -1 - original, 0 - TIFF, 1 - OpenEXR, 2 - PNG, 3 - JPEG, 4 - JPEG-2000, 5 - HEIC, 6 - PPM
59+
fileFormat = -1; // File format: -1 - original, 0 - TIFF, 1 - OpenEXR, 2 - PNG, 3 - JPEG, 4 - JPEG-2000, 5 - HEIC, 6 - JPEGXL 7 - PPM
6060
defFormat = 0; // Default file format = TIFF
6161
bitDepth = -1; // Bit depth: -1 - Original, 0 - uint8, 1 - uint16, 2 - uint32, 3 - uint64, 4 - half, 5 - float, 6 - double
6262
defBDepth = 1; // Default bit depth = uint16
6363
rawRot = -1; // Raw rotation: -1 - Auto EXIF, 0 - Unrotated/Horisontal, 3 - 180 Horisontal, 5 - 90 CW Vertical, 6 - 90 CCW Vertical
6464

6565
normNames = { "normal", "tangent", "object", "world" };
6666
mask_substr = { "_mask.", "_mask_", "_alpha.", "_alpha_" };
67-
out_formats = { "tif", "exr", "png", "jpg", "jp2", "heic", "ppm" };
67+
out_formats = { "tif", "exr", "png", "jpg", "jp2", "heic", "jxl", "ppm" };
6868
}
6969

7070
// get bit depth in bytes

Solidify/src/solidify.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ bool solidify_main(const std::string& inputFileName, const std::string& outputFi
468468
ospec.attribute("Compression", "jpeg:100");
469469
if (settings.fileFormat == 5)
470470
ospec.attribute("Compression", "heic:100");
471+
if (settings.fileFormat == 6)
472+
ospec.attribute("Compression", "jpegxl:100");
471473

472474
ospec.attribute("png:compressionLevel", 4);
473475
//ospec.attribute("tiff:write_exif", 0);

Solidify/src/ui.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ private slots:
125125
QAction* frmt_Exr; // OpenEXR
126126
QAction* frmt_Jp2; // JPEG 2000
127127
QAction* frmt_Hic; // HEIC
128+
QAction* frmt_Jxl; // JPEG XL
128129
QAction* frmt_Ppm; // PPM
129130

130131
//std::vector<QAction*> bitActions;

0 commit comments

Comments
 (0)