{"record":{"id":"6a33ae017059e5e2","repo":"Yalantis/uCrop","slug":"load-jxl-unable-to-load-data-from-file-unl","errorCode":null,"errorMessage":"load_jxl(): Unable to load data from '(FILE*)' unless libjxl is enabled.","messagePattern":"load_jxl\\(\\): Unable to load data from '\\(FILE\\*\\)' unless libjxl is enabled\\.","errorType":"exception","errorClass":"CImgIOException","httpStatus":null,"severity":"error","filePath":"ucrop/src/main/jni/CImg.h","lineNumber":57133,"sourceCode":"    //! Load image from a JPEG XL file \\overloading.\n    CImg<T>& load_jxl(std::FILE *const file) {\n      return _load_jxl(file,0);\n    }\n\n    //! Load image from a JPEG XL file \\newinstance.\n    static CImg<T> get_load_jxl(std::FILE *const file) {\n      return CImg<T>().load_jxl(file);\n    }\n\n    CImg<T>& _load_jxl(std::FILE *const file, const char *const filename) {\n      if (!file && !filename)\n        throw CImgArgumentException(_cimg_instance\n                                    \"load_jxl(): Specified filename is (null).\",\n                                    cimg_instance);\n\n#ifndef cimg_use_jxl\n      if (file)\n        throw CImgIOException(_cimg_instance\n                              \"load_jxl(): Unable to load data from '(FILE*)' unless libjxl is enabled.\",\n                              cimg_instance);\n      else return load_other(filename);\n#else\n      const char *nfilename = filename;\n      std::FILE *nfile = file?file:cimg::fopen(nfilename,\"rb\");\n      const long dataSize = cimg::fsize(nfile);\n      if (dataSize<=0) {\n        cimg::fclose(nfile);\n        throw CImgIOException(_cimg_instance\n                              \"load_jxl(): Failed to get file size '%s'.\",\n                              cimg_instance,\n                              nfilename);\n      }\n      CImg<ucharT> buffer(dataSize);\n      cimg::fread(buffer._data,buffer._width,nfile);\n      cimg::fclose(nfile);\n","sourceCodeStart":57115,"sourceCodeEnd":57151,"githubUrl":"https://github.com/Yalantis/uCrop/blob/f788b534b48c144edf786c8cddbf0e029e637804/ucrop/src/main/jni/CImg.h#L57115-L57151","documentation":"When CImg is built without libjxl (cimg_use_jxl undefined), JPEG XL decoding from an already-open FILE* cannot proceed, since the fallback loader needs a filename. CImg throws CImgIOException instructing that libjxl must be enabled.","triggerScenarios":"Calling load_jxl(std::FILE*) in a build lacking cimg_use_jxl; asset FILE* from Android/uCrop JNI without libjxl linked.","commonSituations":"Build missing libjxl/highway dependencies; .jxl files handed to a CImg build compiled without JPEG XL support.","solutions":["Rebuild with cimg_use_jxl defined, linking libjxl (libjxl-dev) and its dependencies","Install libjxl development packages and recompile the native library","Pass a file path instead of FILE* so CImg can dispatch to load_other()","Convert the .jxl image to PNG/JPEG externally and load that"],"exampleFix":"// build: -Dcimg_use_jxl=1 -ljxl\n// before\nimg.load_jxl(assetFile); // FILE*, build lacks libjxl\n// after\nimg.load_jxl(\"/path/to/image.jxl\"); // or rebuild with libjxl","handlingStrategy":"fallback","validationCode":"#ifndef cimg_use_jxl\n  #error \"Rebuild with cimg_use_jxl for JPEG XL support\"\n#endif","typeGuard":"bool canLoadJxlFromFilePtr() {\n#ifdef cimg_use_jxl\n  return true;\n#else\n  return false;\n#endif\n}","tryCatchPattern":"try { img.load_jxl(file, filename); }\ncatch (CImgIOException&) { img.load(\"image.png\"); // pre-converted fallback\n}","preventionTips":["Enable and link libjxl in the native build (cimg_use_jxl)","Ship pre-converted PNG/JPEG fallbacks for devices lacking JXL support","Prefer filename-based loading so load_other() can dispatch","Verify codec availability at app startup with a capability check"],"tags":["jpeg-xl","image-loading","build-configuration","cimg","libjxl"],"backgroundTag":"missing-optional-dependency","analyzedSha":"f788b534b48c144edf786c8cddbf0e029e637804","analyzedAt":"2026-09-08T08:36:04.887Z","contentChangedAt":"2026-09-08T08:36:04.887Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}