Skip to content

Commit 4adfadd

Browse files
committed
io: add support for JXL images
1 parent 7ba682d commit 4adfadd

File tree

12 files changed

+390
-4
lines changed

12 files changed

+390
-4
lines changed

.github/workflows/continuous_integration.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
uses: lukka/run-vcpkg@v11
4343
with:
4444
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
45-
vcpkgGitCommitId: 'd5ec528843d29e3a52d745a64b469f810b2cedbf'
45+
vcpkgGitCommitId: 'ef7dbf94b9198bc58f45951adcf1f041fcbc5ea0'
4646

4747
- name: Install Ubuntu dependencies
4848
if: matrix.os == 'ubuntu-latest'

apps/InterfaceCOLMAP/InterfaceCOLMAP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ bool Application::Initialize(size_t argc, LPCTSTR* argv)
187187
const String strInputFileNameExt(Util::getFileExt(OPT::strInputFileName).ToLower());
188188
OPT::bFromOpenMVS = (strInputFileNameExt == MVS_EXT);
189189
if (OPT::bFromOpenMVS) {
190-
OPT::strImageFolder = MAKE_PATH_SAFE(OPT::strImageFolder);
190+
OPT::strImageFolder = MAKE_PATH_FULL(WORKING_FOLDER_FULL, OPT::strImageFolder);
191191
if (OPT::strOutputFileName.empty())
192192
OPT::strOutputFileName = Util::getFilePath(OPT::strInputFileName);
193193
} else {

apps/InterfaceMetashape/InterfaceMetashape.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ bool UndistortBrown(Image& imageData, uint32_t ID, const DistCoeff& dc, const St
674674

675675
// save undistorted image
676676
imageData.image = imgUndist;
677-
imageData.name = pathData + String::FormatString(_T("%05u.jpg"), ID);
677+
imageData.name = pathData + String::FormatString(_T("%05u.jxl"), ID);
678678
Util::ensureFolder(imageData.name);
679679
return imageData.image.Save(imageData.name);
680680
}

build/Templates/ConfigLocal.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
// JPEG codec
3434
#cmakedefine _USE_JPG
3535

36+
// JPEG-XL codec
37+
#cmakedefine _USE_JXL
38+
3639
// PNG codec
3740
#cmakedefine _USE_PNG
3841

libs/Common/Types.inl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3117,6 +3117,10 @@ bool TImage<TYPE>::Save(const String& fileName) const
31173117
compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);
31183118
compression_params.push_back(95);
31193119
} else
3120+
if (ext == ".jxl") {
3121+
compression_params.push_back(cv::IMWRITE_JPEGXL_QUALITY);
3122+
compression_params.push_back(95);
3123+
} else
31203124
if (ext == ".pfm") {
31213125
if (Base::depth() != CV_32F)
31223126
return false;

libs/IO/CMakeLists.txt

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,48 @@
1+
# Macro to check pkg-config modules and produce a full-path library list
2+
macro(pkg_check_modules_fullpath_libs PREFIX MODULE_NAME)
3+
# Call pkg_check_modules
4+
pkg_check_modules(${PREFIX} REQUIRED IMPORTED_TARGET ${MODULE_NAME})
5+
if(${PREFIX}_FOUND)
6+
set(${PREFIX}_FULLPATH_LIBRARIES "" PARENT_SCOPE)
7+
foreach(lib ${${PREFIX}_LIBRARIES})
8+
set(lib_path "")
9+
set(lib_prefix "")
10+
set(lib_ext "")
11+
if(WIN32)
12+
set(lib_ext ".lib")
13+
else()
14+
set(lib_prefix "lib")
15+
set(lib_ext ".a")
16+
endif()
17+
# Skip system libraries like 'm' on Windows
18+
if(WIN32 AND (lib STREQUAL "m"))
19+
continue()
20+
endif()
21+
# If lib already has a path, use as is
22+
if(EXISTS "${lib_prefix}${lib}${lib_ext}")
23+
set(lib_path "${lib_prefix}${lib}${lib_ext}")
24+
else()
25+
foreach(dir ${${PREFIX}_LIBRARY_DIRS})
26+
if(EXISTS "${dir}/${lib_prefix}${lib}${lib_ext}")
27+
set(lib_path "${dir}/${lib_prefix}${lib}${lib_ext}")
28+
break()
29+
endif()
30+
endforeach()
31+
endif()
32+
if(NOT lib_path STREQUAL "")
33+
list(APPEND ${PREFIX}_FULLPATH_LIBRARIES "${lib_path}")
34+
else()
35+
list(APPEND ${PREFIX}_FULLPATH_LIBRARIES "${lib}")
36+
endif()
37+
endforeach()
38+
set(${PREFIX}_FULLPATH_LIBRARIES "${${PREFIX}_FULLPATH_LIBRARIES}" PARENT_SCOPE)
39+
message(STATUS "Found ${MODULE_NAME}: ${${PREFIX}_VERSION} libs: ${${PREFIX}_FULLPATH_LIBRARIES}")
40+
else()
41+
set(${PREFIX}_FULLPATH_LIBRARIES "" PARENT_SCOPE)
42+
message(STATUS "${MODULE_NAME} not found, support will be disabled")
43+
endif()
44+
endmacro()
45+
146
# Find required packages
247
FIND_PACKAGE(PNG QUIET)
348
if(PNG_FOUND)
@@ -15,6 +60,14 @@ if(JPEG_FOUND)
1560
else()
1661
SET(JPEG_LIBRARIES "")
1762
endif()
63+
FIND_PACKAGE(PkgConfig REQUIRED)
64+
pkg_check_modules_fullpath_libs(JPEGXL libjxl)
65+
if(JPEGXL_FOUND)
66+
SET(_USE_JXL TRUE CACHE INTERNAL "")
67+
set(JPEGXL_LIBRARIES ${JPEGXL_FULLPATH_LIBRARIES})
68+
else()
69+
SET(JPEGXL_LIBRARIES "")
70+
endif()
1871
FIND_PACKAGE(TIFF QUIET)
1972
if(TIFF_FOUND)
2073
INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR})
@@ -38,7 +91,7 @@ IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.16.0)
3891
endif()
3992

4093
# Link its dependencies
41-
TARGET_LINK_LIBRARIES(IO Common ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARIES} ${EXIV2_LIBS})
94+
TARGET_LINK_LIBRARIES(IO Common ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${JPEGXL_LIBRARIES} ${TIFF_LIBRARIES} ${EXIV2_LIBS})
4295

4396
# Install
4497
SET_TARGET_PROPERTIES(IO PROPERTIES

libs/IO/Common.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
#ifdef _USE_JPG
3434
#define _IMAGE_JPG // add JPG support
3535
#endif
36+
#ifdef _USE_JXL
37+
#define _IMAGE_JXL // add JpegXL support
38+
#endif
3639
#ifdef _USE_TIFF
3740
#define _IMAGE_TIFF // add TIFF support
3841
#endif
@@ -56,6 +59,9 @@
5659
#ifdef _IMAGE_TIFF
5760
#include "ImageTIFF.h"
5861
#endif
62+
#ifdef _IMAGE_JXL
63+
#include "ImageJXL.h"
64+
#endif
5965
#include "PLY.h"
6066
#include "OBJ.h"
6167
/*----------------------------------------------------------------*/

libs/IO/Image.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,10 @@ CImage* CImage::Create(LPCTSTR szName, IMCREATE mode)
896896
else if (_tcsncicmp(fext, _T(".jpg"), 4) == 0 || _tcsncicmp(fext, _T(".jpeg"), 5) == 0)
897897
pImage = new CImageJPG();
898898
#endif
899+
#ifdef _IMAGE_JXL
900+
else if (_tcsncicmp(fext, _T(".jxl"), 4) == 0)
901+
pImage = new CImageJXL();
902+
#endif
899903
#ifdef _IMAGE_TIFF
900904
else if (_tcsncicmp(fext, _T(".tif"), 4) == 0 || _tcsncicmp(fext, _T(".tiff"), 5) == 0)
901905
pImage = new CImageTIFF();

libs/IO/Image.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ typedef enum PIXELFORMAT_TYPE {
3232
// gray
3333
PF_A8,
3434
PF_GRAY8,
35+
PF_GRAY32F, // 1 channel, 32-bit float (depth map)
3536
// uncompressed RGB
3637
PF_R5G6B5,
3738
PF_R8G8B8,

0 commit comments

Comments
 (0)