librawspeed-full 1.0.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1138 -0
- package/LICENSE +21 -0
- package/README.md +1414 -0
- package/binding.gyp +55 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/.clang-format +4 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/COPYRIGHT +27 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Changelog.txt +2802 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/DEVELOPER-NOTES +20 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_4-allow-VC5-validate.diff +21 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff +15 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-allow-VC5-validate.diff +21 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.cpp.diff +29 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.h.diff +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/INSTALL +51 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.CDDL +340 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.LGPL +458 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.pro +19 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.sln +123 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile +2135 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.am +140 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.dist +501 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.in +2135 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.mingw +297 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.msvc +628 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.GoPro.txt +112 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.cmake +9 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.demosaic-packs +17 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/README.md +106 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/aclocal.m4 +1674 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.keep_me +2 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/4channels +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/dcraw_emu +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/mem_image +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/multirender_test +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/postprocessing_benchmark +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/raw-identify +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/rawtextdump +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/simple_dcraw +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/bin/unprocessed_raw +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw.h +534 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_alloc.h +148 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_const.h +814 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_datastream.h +410 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_internal.h +341 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_types.h +1175 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_version.h +63 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw.a +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw.la +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw_r.a +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw_r.la +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/pkgconfig/libraw.pc +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/pkgconfig/libraw_r.pc +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/COPYRIGHT +27 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/Changelog.txt +2802 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/LICENSE.CDDL +340 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/LICENSE.LGPL +458 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/compile +347 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/config.guess +1433 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/config.log +930 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/config.status +2090 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/config.sub +1804 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/configure +22084 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/configure.ac +153 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/depcomp +791 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-C.html +187 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-CXX.html +881 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-notes.html +305 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-overview.html +66 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/doc/index.html +38 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/install-sh +501 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/defines.h +193 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dmp_include.h +27 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/var_defines.h +215 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw.a +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw.lai +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw_r.a +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw_r.lai +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/libraw.la +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/lib/libraw_r.la +41 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw.h +534 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc.in +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc.in +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/libtool +12190 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/ltmain.sh +11524 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/libtool.m4 +8488 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltoptions.m4 +467 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltversion.m4 +24 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/missing +215 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/object/.keep_me +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/rsxml2c.sh +6 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_4channels-4channels.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_dcraw_emu-dcraw_emu.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_dcraw_half-dcraw_half.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_half_mt-half_mt.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_mem_image-mem_image_sample.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_multirender_test-multirender_test.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_postprocessing_benchmark-postprocessing_benchmark.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_raw_identify-raw-identify.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_rawtextdump-rawtextdump.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_simple_dcraw-simple_dcraw.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_unprocessed_raw-unprocessed_raw.Po +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/4channels.cpp +174 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/Makefile +2 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt.c +178 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/shlib-version.sh +11 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/libraw_c_api.Plo +1597 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/libraw_datastream.Plo +1604 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/Makefile +2 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/canon_600.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/crx.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_dcraw.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_libraw.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_libraw_dcrdefs.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/dng.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/fp_dng.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/fuji_compressed.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/generic.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/kodak_decoders.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/load_mfbacks.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/smal.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/unpack.Plo +1661 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/unpack_thumb.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/aahd_demosaic.Plo +1653 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/ahd_demosaic.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/dcb_demosaic.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/dht_demosaic.Plo +1653 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/misc_demosaic.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/xtrans_demosaic.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/dngsdk_glue.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/rawspeed_glue.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/adobepano.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/canon.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/ciff.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/cr3_parser.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/epson.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/exif_gps.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/fuji.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/hasselblad_model.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/identify.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/identify_tools.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/kodak.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/leica.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/makernotes.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/mediumformat.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/minolta.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/misc_parsers.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/nikon.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/normalize_model.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/olympus.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/p1.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/pentax.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/samsung.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/sony.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/tiff.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/aspect_ratio.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/dcraw_process.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/mem_image.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_aux.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_utils.Plo +1660 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_utils_dcrdefs.Plo +1657 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/ext_preprocess.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/raw2image.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/subtract_black.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/cameralist.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/colorconst.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/colordata.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/wblists.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/curves.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/decoder_info.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/init_close_utils.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/open.Plo +1661 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/phaseone_processing.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/read_utils.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/thumb_utils.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/utils_dcraw.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/utils_libraw.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/apply_profile.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/file_write.Plo +1656 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/tiff_writer.Plo +1659 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/x3f_parse_process.Plo +1 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/x3f_utils_patched.Plo +1 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.dirstamp +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.lo +12 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.o +0 -0
- package/deps/LibRaw-Source/LibRaw-0.21.4/version.sh +16 -0
- package/lib/index.d.ts +671 -0
- package/lib/index.js +2292 -0
- package/package.json +134 -0
- package/prebuilds/darwin-arm64/librawspeed-full.node +0 -0
- package/scripts/build-libraw.sh +303 -0
- package/scripts/download-dependencies.sh +31 -0
- package/scripts/download-libraw.sh +30 -0
- package/scripts/generate-docs.js +590 -0
- package/scripts/merge-prebuilds.sh +40 -0
- package/scripts/prepare-libraw.js +132 -0
- package/scripts/publish.sh +84 -0
- package/scripts/setup-dev-env.sh +112 -0
- package/src/addon.cpp +8 -0
- package/src/libraw_wrapper.cpp +1370 -0
- package/src/libraw_wrapper.h +114 -0
- package/types/index.d.ts +152 -0
package/README.md
ADDED
|
@@ -0,0 +1,1414 @@
|
|
|
1
|
+
# LibRaw Node.js
|
|
2
|
+
|
|
3
|
+
一个使用 LibRaw 库处理 RAW 图像文件的高性能 Node.js 原生插件。
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/librawspeed-full)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[]()
|
|
9
|
+
[](https://www.npmjs.com/package/librawspeed-full)
|
|
10
|
+
|
|
11
|
+
## 功能特性
|
|
12
|
+
|
|
13
|
+
- ✅ **100+ RAW 格式** - Canon、Nikon、Sony、Adobe DNG 等
|
|
14
|
+
- ✅ **全面的元数据** - EXIF 数据、相机设置、尺寸、镜头信息
|
|
15
|
+
- ✅ **高级色彩信息** - 色彩矩阵、白平衡、校准数据
|
|
16
|
+
- ✅ **图像处理管道** - 完整的 dcraw 兼容处理链
|
|
17
|
+
- ✅ **缩略图提取** - 高质量嵌入式缩略图提取
|
|
18
|
+
- ✅ **RAW 转 JPEG 转换** - 🆕 高性能 JPEG 导出与优化
|
|
19
|
+
- ✅ **批量处理** - 🆕 使用智能设置处理数百个文件
|
|
20
|
+
- ✅ **AI 驱动设置** - 🆕 基于图像分析的自动质量优化
|
|
21
|
+
- ✅ **内存操作** - 完全在内存中处理图像
|
|
22
|
+
- ✅ **多种输出格式** - PPM、TIFF、JPEG 与高级压缩选项
|
|
23
|
+
- ✅ **缓冲区创建 API** - 🆕 直接在内存中创建图像缓冲区(JPEG、PNG、WebP、AVIF、TIFF、PPM、缩略图)
|
|
24
|
+
- ✅ **基于流的处理** - 🆕 返回数据流而不是写入文件
|
|
25
|
+
- ✅ **缓冲区支持** - 从内存缓冲区加载 RAW 数据
|
|
26
|
+
- ✅ **配置控制** - 伽马、亮度、色彩空间设置
|
|
27
|
+
- ✅ **高性能** - 原生 C++ 处理与 JavaScript 便利性
|
|
28
|
+
- ✅ **内存高效** - 适当的资源管理和清理
|
|
29
|
+
- ✅ **基于 Promise 的 API** - 现代 async/await 支持
|
|
30
|
+
- ✅ **跨平台** - Windows、macOS、Linux 支持(已测试 Windows)
|
|
31
|
+
- ✅ **1000+ 相机支持** - LibRaw 的广泛相机数据库
|
|
32
|
+
- ✅ **全面测试** - 使用真实 RAW 文件 100% 测试覆盖
|
|
33
|
+
- ✅ **生产就绪** - 经过多种相机格式实战测试
|
|
34
|
+
|
|
35
|
+
## 支持的格式
|
|
36
|
+
|
|
37
|
+
LibRaw 支持 100+ RAW 格式,包括:
|
|
38
|
+
|
|
39
|
+
| 制造商 | 格式 |
|
|
40
|
+
| -------------------- | ---------------------- |
|
|
41
|
+
| **佳能** | `.CR2`, `.CR3`, `.CRW` |
|
|
42
|
+
| **尼康** | `.NEF`, `.NRW` |
|
|
43
|
+
| **索尼** | `.ARW`, `.SRF`, `.SR2` |
|
|
44
|
+
| **Adobe** | `.DNG` |
|
|
45
|
+
| **富士** | `.RAF` |
|
|
46
|
+
| **奥林巴斯** | `.ORF` |
|
|
47
|
+
| **松下** | `.RW2` |
|
|
48
|
+
| **宾得** | `.PEF` |
|
|
49
|
+
| **徕卡** | `.DNG`, `.RWL` |
|
|
50
|
+
| **还有更多...** | _总共 100+ 格式_ |
|
|
51
|
+
|
|
52
|
+
## 安装
|
|
53
|
+
|
|
54
|
+
### 📦 从 NPM 注册表
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install librawspeed-full
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**版本 1.0.18** 现已在 [npmjs.com](https://www.npmjs.com/package/librawspeed-full) 上可用!🎉
|
|
61
|
+
|
|
62
|
+
### 🛠️ 构建要求
|
|
63
|
+
|
|
64
|
+
- **Node.js** 14.0.0 或更高版本
|
|
65
|
+
- **Python** 2.7 或 3.x(用于 node-gyp)
|
|
66
|
+
- **C++ 编译器**:
|
|
67
|
+
- **Windows**: Visual Studio Build Tools 或 Visual Studio Community
|
|
68
|
+
- **macOS**: Xcode Command Line Tools 或 Xcode
|
|
69
|
+
- **Linux**: build-essential 包
|
|
70
|
+
|
|
71
|
+
**💡 提示**:node-gyp 会自动处理构建工具,无需手动安装 make 等工具
|
|
72
|
+
|
|
73
|
+
### 🔧 环境检查
|
|
74
|
+
|
|
75
|
+
安装前可以检查环境是否满足要求:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm run check:env
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### ⚠️ 故障排除
|
|
82
|
+
|
|
83
|
+
如果安装失败,请尝试:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 清理并重新安装
|
|
87
|
+
npm run clean
|
|
88
|
+
npm run rebuild
|
|
89
|
+
|
|
90
|
+
# 或强制重新构建
|
|
91
|
+
npm install --force
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**常见问题:**
|
|
95
|
+
|
|
96
|
+
1. **Python 未找到**
|
|
97
|
+
```bash
|
|
98
|
+
npm config set python python3
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
2. **编译器未找到**
|
|
102
|
+
```bash
|
|
103
|
+
# Windows
|
|
104
|
+
npm install --global windows-build-tools
|
|
105
|
+
|
|
106
|
+
# macOS
|
|
107
|
+
xcode-select --install
|
|
108
|
+
|
|
109
|
+
# Linux
|
|
110
|
+
sudo apt-get install build-essential
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 🚀 快速验证
|
|
114
|
+
|
|
115
|
+
安装后,验证包是否正常工作:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
node -e "const LibRaw = require('librawspeed-full'); console.log('LibRaw version:', LibRaw.getVersion());"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
预期输出:`LibRaw version: 0.21.4-Release`
|
|
122
|
+
|
|
123
|
+
## 先决条件(从源码构建)
|
|
124
|
+
|
|
125
|
+
- **Node.js** 14.0.0 或更高版本
|
|
126
|
+
- **Python** 3.x(用于 node-gyp)
|
|
127
|
+
- **Visual Studio Build Tools**(Windows)
|
|
128
|
+
- **Xcode Command Line Tools**(macOS)
|
|
129
|
+
- **build-essential**(Linux)
|
|
130
|
+
|
|
131
|
+
### 🛠️ 交叉编译支持
|
|
132
|
+
|
|
133
|
+
此项目支持多平台交叉编译。有关详细工具链要求和设置说明,请参阅[交叉编译指南](docs/CROSS_COMPILATION.md)。
|
|
134
|
+
|
|
135
|
+
**支持的平台:**
|
|
136
|
+
- ✅ Windows x64
|
|
137
|
+
- ✅ macOS x64(Intel)
|
|
138
|
+
- ✅ macOS ARM64(Apple Silicon)
|
|
139
|
+
- ✅ Linux x64
|
|
140
|
+
|
|
141
|
+
当前 npm 预编译包发布目标:
|
|
142
|
+
- `win32-x64`
|
|
143
|
+
- `darwin-x64`
|
|
144
|
+
- `darwin-arm64`
|
|
145
|
+
- `linux-x64`
|
|
146
|
+
|
|
147
|
+
**快速设置:**
|
|
148
|
+
```bash
|
|
149
|
+
# 安装所有交叉编译工具链
|
|
150
|
+
brew install mingw-w64 aarch64-apple-darwin24-gcc-15 musl-cross
|
|
151
|
+
|
|
152
|
+
# 构建所有平台
|
|
153
|
+
npm run cross-compile:all
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 快速开始
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
const LibRaw = require("librawspeed-full");
|
|
160
|
+
|
|
161
|
+
async function processRAW() {
|
|
162
|
+
// 🆕 检查文件是否为 LibRaw 支持的 RAW 格式
|
|
163
|
+
const checkResult = LibRaw.isRawFile('photo.cr2');
|
|
164
|
+
if (!checkResult.isRawFile) {
|
|
165
|
+
console.log('不是支持的 RAW 文件:', checkResult.message);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const processor = new LibRaw();
|
|
170
|
+
|
|
171
|
+
try {
|
|
172
|
+
// 加载 RAW 文件
|
|
173
|
+
await processor.loadFile("photo.cr2");
|
|
174
|
+
|
|
175
|
+
// 🆕 新功能:缓冲区创建 API - 直接在内存中创建图像
|
|
176
|
+
// 首先处理 RAW 数据
|
|
177
|
+
await processor.processImage();
|
|
178
|
+
|
|
179
|
+
// 创建 JPEG 缓冲区而不写入文件
|
|
180
|
+
const jpegBuffer = await processor.createJPEGBuffer({
|
|
181
|
+
quality: 85,
|
|
182
|
+
width: 1920,
|
|
183
|
+
progressive: true,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
console.log(`JPEG 缓冲区已创建:${jpegBuffer.buffer.length} 字节`);
|
|
187
|
+
|
|
188
|
+
// 并行创建多种格式
|
|
189
|
+
const [pngResult, webpResult, thumbResult] = await Promise.all([
|
|
190
|
+
processor.createPNGBuffer({ width: 1200, compressionLevel: 6 }),
|
|
191
|
+
processor.createWebPBuffer({ quality: 80, width: 1200 }),
|
|
192
|
+
processor.createThumbnailJPEGBuffer({ maxSize: 300 }),
|
|
193
|
+
]);
|
|
194
|
+
|
|
195
|
+
// 直接使用缓冲区(例如,通过 HTTP 发送、存储到数据库等)
|
|
196
|
+
// 无需临时文件!
|
|
197
|
+
|
|
198
|
+
console.log(`PNG:${pngResult.buffer.length} 字节`);
|
|
199
|
+
console.log(`WebP:${webpResult.buffer.length} 字节`);
|
|
200
|
+
console.log(`缩略图:${thumbResult.buffer.length} 字节`);
|
|
201
|
+
|
|
202
|
+
// 🆕 新功能:高性能 JPEG 转换(传统方法仍然可用)
|
|
203
|
+
// 使用高级选项将 RAW 转换为 JPEG
|
|
204
|
+
const jpegResult = await processor.convertToJPEG("output.jpg", {
|
|
205
|
+
quality: 85, // JPEG 质量(1-100)
|
|
206
|
+
width: 1920, // 调整到 1920px 宽度
|
|
207
|
+
progressive: true, // 用于网络的渐进式 JPEG
|
|
208
|
+
mozjpeg: true, // 使用 MozJPEG 获得更好的压缩
|
|
209
|
+
chromaSubsampling: "4:2:0", // 优化文件大小
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
console.log(
|
|
213
|
+
`JPEG 已保存:${jpegResult.metadata.fileSize.compressed / 1024}KB`
|
|
214
|
+
);
|
|
215
|
+
console.log(
|
|
216
|
+
`压缩率:${jpegResult.metadata.fileSize.compressionRatio}x`
|
|
217
|
+
);
|
|
218
|
+
console.log(`处理时间:${jpegResult.metadata.processing.timeMs}ms`);
|
|
219
|
+
|
|
220
|
+
// 🆕 AI 驱动的优化设置
|
|
221
|
+
const analysis = await processor.getOptimalJPEGSettings({ usage: "web" });
|
|
222
|
+
console.log(`推荐质量:${analysis.recommended.quality}`);
|
|
223
|
+
console.log(`图像类别:${analysis.imageAnalysis.category}`);
|
|
224
|
+
|
|
225
|
+
// 应用优化设置
|
|
226
|
+
await processor.convertToJPEG("optimized.jpg", analysis.recommended);
|
|
227
|
+
|
|
228
|
+
// 提取全面的元数据
|
|
229
|
+
const [metadata, advanced, lens, color] = await Promise.all([
|
|
230
|
+
processor.getMetadata(),
|
|
231
|
+
processor.getAdvancedMetadata(),
|
|
232
|
+
processor.getLensInfo(),
|
|
233
|
+
processor.getColorInfo(),
|
|
234
|
+
]);
|
|
235
|
+
|
|
236
|
+
console.log("相机:", metadata.make, metadata.model);
|
|
237
|
+
console.log("镜头:", lens.lensName || "未知");
|
|
238
|
+
console.log(
|
|
239
|
+
"设置:",
|
|
240
|
+
`ISO ${metadata.iso}, f/${metadata.aperture}, ${metadata.focalLength}mm`
|
|
241
|
+
);
|
|
242
|
+
console.log(
|
|
243
|
+
"色彩:",
|
|
244
|
+
`${color.colors} 通道,黑电平 ${color.blackLevel}`
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
// 传统处理管道(仍然可用)
|
|
248
|
+
await processor.setOutputParams({
|
|
249
|
+
bright: 1.1, // 亮度调整
|
|
250
|
+
gamma: [2.2, 4.5], // 伽马曲线
|
|
251
|
+
output_bps: 16, // 16 位输出
|
|
252
|
+
no_auto_bright: false, // 启用自动亮度
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// 处理图像
|
|
256
|
+
await processor.raw2Image();
|
|
257
|
+
await processor.processImage();
|
|
258
|
+
|
|
259
|
+
// 在内存中创建处理后的图像
|
|
260
|
+
const imageData = await processor.createMemoryImage();
|
|
261
|
+
console.log(
|
|
262
|
+
`已处理:${imageData.width}x${imageData.height},${imageData.dataSize} 字节`
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
// 导出到文件
|
|
266
|
+
await processor.writeTIFF("output.tiff");
|
|
267
|
+
await processor.writeThumbnail("thumbnail.jpg");
|
|
268
|
+
|
|
269
|
+
// 提取高质量缩略图
|
|
270
|
+
const thumbnailData = await processor.createMemoryThumbnail();
|
|
271
|
+
console.log(`缩略图:${thumbnailData.width}x${thumbnailData.height}`);
|
|
272
|
+
|
|
273
|
+
// 始终清理资源
|
|
274
|
+
await processor.close();
|
|
275
|
+
} catch (error) {
|
|
276
|
+
console.error("错误:", error.message);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
processRAW();
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## 完整的 API 覆盖
|
|
284
|
+
|
|
285
|
+
此包装器提供全面的 LibRaw 功能,包含 **50+ 方法**,分为 8 个类别:
|
|
286
|
+
|
|
287
|
+
### 🔧 核心操作(10 个方法)
|
|
288
|
+
|
|
289
|
+
- 文件加载(`loadFile`、`loadBuffer`)
|
|
290
|
+
- 处理管道(`raw2Image`、`processImage`、`subtractBlack`)
|
|
291
|
+
- 资源管理(`close`、`freeImage`)
|
|
292
|
+
|
|
293
|
+
### 📊 元数据和信息(12 个方法)
|
|
294
|
+
|
|
295
|
+
- 基本元数据(`getMetadata`、`getImageSize`、`getFileInfo`)
|
|
296
|
+
- 高级元数据(`getAdvancedMetadata`、`getLensInfo`、`getColorInfo`)
|
|
297
|
+
- 相机矩阵(`getCameraColorMatrix`、`getRGBCameraMatrix`)
|
|
298
|
+
|
|
299
|
+
### 🖼️ 图像处理(8 个方法)
|
|
300
|
+
|
|
301
|
+
- 内存操作(`createMemoryImage`、`createMemoryThumbnail`)
|
|
302
|
+
- 格式转换(`getMemImageFormat`、`copyMemImage`)
|
|
303
|
+
- 处理控制(`adjustMaximum`、`adjustSizesInfoOnly`)
|
|
304
|
+
|
|
305
|
+
### 📄 文件写入器(6 个方法)
|
|
306
|
+
|
|
307
|
+
- 输出格式(`writePPM`、`writeTIFF`、`writeThumbnail`)
|
|
308
|
+
- 格式验证和质量控制
|
|
309
|
+
|
|
310
|
+
### ⚙️ 配置(4 个方法)
|
|
311
|
+
|
|
312
|
+
- 参数控制(`setOutputParams`、`getOutputParams`)
|
|
313
|
+
- 处理设置和色彩空间管理
|
|
314
|
+
|
|
315
|
+
### 🔍 扩展实用工具(8 个方法)
|
|
316
|
+
|
|
317
|
+
- 格式检测(`isFloatingPoint`、`isFujiRotated`、`isSRAW`)
|
|
318
|
+
- 相机特定功能(`isNikonSRAW`、`isCoolscanNEF`)
|
|
319
|
+
|
|
320
|
+
### 🎨 色彩操作(3 个方法)
|
|
321
|
+
|
|
322
|
+
- 色彩分析(`getColorAt`、`convertFloatToInt`)
|
|
323
|
+
- 白平衡和色彩矩阵操作
|
|
324
|
+
|
|
325
|
+
### 📈 静态方法(4 个方法)
|
|
326
|
+
|
|
327
|
+
- 库信息(`getVersion`、`getCapabilities`)
|
|
328
|
+
- 相机数据库(`getCameraList`、`getCameraCount`)
|
|
329
|
+
|
|
330
|
+
**所有方法都经过全面测试,可用于生产环境!**
|
|
331
|
+
|
|
332
|
+
## 🆕 缓冲区创建 API(新功能)
|
|
333
|
+
|
|
334
|
+
### 直接内存缓冲区创建
|
|
335
|
+
|
|
336
|
+
直接在内存中创建图像缓冲区,无需写入文件。非常适合 Web 应用程序、API 和流式工作流程。
|
|
337
|
+
|
|
338
|
+
#### 可用的缓冲区方法
|
|
339
|
+
|
|
340
|
+
```javascript
|
|
341
|
+
const processor = new LibRaw();
|
|
342
|
+
await processor.loadFile("photo.cr2");
|
|
343
|
+
await processor.processImage();
|
|
344
|
+
|
|
345
|
+
// 创建不同格式的缓冲区
|
|
346
|
+
const jpegBuffer = await processor.createJPEGBuffer(options);
|
|
347
|
+
const pngBuffer = await processor.createPNGBuffer(options);
|
|
348
|
+
const webpBuffer = await processor.createWebPBuffer(options);
|
|
349
|
+
const avifBuffer = await processor.createAVIFBuffer(options);
|
|
350
|
+
const tiffBuffer = await processor.createTIFFBuffer(options);
|
|
351
|
+
const ppmBuffer = await processor.createPPMBuffer();
|
|
352
|
+
|
|
353
|
+
// 无需完整处理即可提取缩略图缓冲区
|
|
354
|
+
const processor2 = new LibRaw();
|
|
355
|
+
await processor2.loadFile("photo.cr2");
|
|
356
|
+
const thumbBuffer = await processor2.createThumbnailJPEGBuffer(options);
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
#### 缓冲区创建选项
|
|
360
|
+
|
|
361
|
+
##### JPEG 缓冲区选项
|
|
362
|
+
|
|
363
|
+
```javascript
|
|
364
|
+
{
|
|
365
|
+
quality: 85, // 1-100(默认:85)
|
|
366
|
+
width: 1200, // 目标宽度
|
|
367
|
+
height: 800, // 目标高度
|
|
368
|
+
progressive: true, // 渐进式 JPEG
|
|
369
|
+
fastMode: false, // 速度与质量权衡
|
|
370
|
+
effort: 4 // 编码努力程度 1-8
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
##### PNG 缓冲区选项
|
|
375
|
+
|
|
376
|
+
```javascript
|
|
377
|
+
{
|
|
378
|
+
width: 1200, // 目标宽度
|
|
379
|
+
height: 800, // 目标高度
|
|
380
|
+
compressionLevel: 6, // 0-9(默认:6)
|
|
381
|
+
fastMode: false // 速度与大小权衡
|
|
382
|
+
}
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
##### WebP 缓冲区选项
|
|
386
|
+
|
|
387
|
+
```javascript
|
|
388
|
+
{
|
|
389
|
+
quality: 80, // 1-100(默认:80)
|
|
390
|
+
width: 1200, // 目标宽度
|
|
391
|
+
height: 800, // 目标高度
|
|
392
|
+
lossless: false, // 无损模式
|
|
393
|
+
effort: 4, // 编码努力程度 0-6
|
|
394
|
+
fastMode: false // 速度优化
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
##### AVIF 缓冲区选项
|
|
399
|
+
|
|
400
|
+
```javascript
|
|
401
|
+
{
|
|
402
|
+
quality: 50, // 1-100(默认:50)
|
|
403
|
+
width: 1200, // 目标宽度
|
|
404
|
+
height: 800, // 目标高度
|
|
405
|
+
lossless: false, // 无损模式
|
|
406
|
+
effort: 4 // 编码努力程度 0-9
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
##### TIFF 缓冲区选项
|
|
411
|
+
|
|
412
|
+
```javascript
|
|
413
|
+
{
|
|
414
|
+
width: 1200, // 目标宽度
|
|
415
|
+
height: 800, // 目标高度
|
|
416
|
+
compression: 'lzw', // 'none', 'lzw', 'zip'
|
|
417
|
+
predictor: 'horizontal' // 压缩预测器
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
##### 缩略图缓冲区选项
|
|
422
|
+
|
|
423
|
+
```javascript
|
|
424
|
+
{
|
|
425
|
+
maxSize: 300, // 最大尺寸
|
|
426
|
+
quality: 85, // JPEG 质量 1-100
|
|
427
|
+
fastMode: false // 速度优化
|
|
428
|
+
}
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### 使用示例
|
|
432
|
+
|
|
433
|
+
##### Web API 响应
|
|
434
|
+
|
|
435
|
+
```javascript
|
|
436
|
+
app.get("/api/photo/:id/thumbnail", async (req, res) => {
|
|
437
|
+
const processor = new LibRaw();
|
|
438
|
+
try {
|
|
439
|
+
await processor.loadFile(`photos/${req.params.id}.cr2`);
|
|
440
|
+
|
|
441
|
+
const result = await processor.createThumbnailJPEGBuffer({
|
|
442
|
+
maxSize: 300,
|
|
443
|
+
quality: 85,
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
res.set({
|
|
447
|
+
"Content-Type": "image/jpeg",
|
|
448
|
+
"Content-Length": result.buffer.length,
|
|
449
|
+
"Cache-Control": "public, max-age=86400",
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
res.send(result.buffer);
|
|
453
|
+
} finally {
|
|
454
|
+
await processor.close();
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
##### 多格式生成
|
|
460
|
+
|
|
461
|
+
```javascript
|
|
462
|
+
async function generateFormats(rawFile, outputDir) {
|
|
463
|
+
const processor = new LibRaw();
|
|
464
|
+
await processor.loadFile(rawFile);
|
|
465
|
+
await processor.processImage();
|
|
466
|
+
|
|
467
|
+
// 并行生成所有格式
|
|
468
|
+
const [jpeg, png, webp, avif] = await Promise.all([
|
|
469
|
+
processor.createJPEGBuffer({ quality: 85, width: 1920 }),
|
|
470
|
+
processor.createPNGBuffer({ width: 1200, compressionLevel: 6 }),
|
|
471
|
+
processor.createWebPBuffer({ quality: 80, width: 1920 }),
|
|
472
|
+
processor.createAVIFBuffer({ quality: 50, width: 1200 }),
|
|
473
|
+
]);
|
|
474
|
+
|
|
475
|
+
// 根据需要保存或处理缓冲区
|
|
476
|
+
fs.writeFileSync(`${outputDir}/image.jpg`, jpeg.buffer);
|
|
477
|
+
fs.writeFileSync(`${outputDir}/image.png`, png.buffer);
|
|
478
|
+
fs.writeFileSync(`${outputDir}/image.webp`, webp.buffer);
|
|
479
|
+
fs.writeFileSync(`${outputDir}/image.avif`, avif.buffer);
|
|
480
|
+
|
|
481
|
+
await processor.close();
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
##### 流式上传
|
|
486
|
+
|
|
487
|
+
```javascript
|
|
488
|
+
async function uploadToCloud(rawFile) {
|
|
489
|
+
const processor = new LibRaw();
|
|
490
|
+
await processor.loadFile(rawFile);
|
|
491
|
+
await processor.processImage();
|
|
492
|
+
|
|
493
|
+
const webpResult = await processor.createWebPBuffer({
|
|
494
|
+
quality: 80,
|
|
495
|
+
width: 1600,
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
// 直接将缓冲区上传到云存储
|
|
499
|
+
const uploadResult = await cloudStorage.upload(webpResult.buffer, {
|
|
500
|
+
contentType: "image/webp",
|
|
501
|
+
fileName: "processed-image.webp",
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
await processor.close();
|
|
505
|
+
return uploadResult;
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
#### 缓冲区结果结构
|
|
510
|
+
|
|
511
|
+
所有缓冲区创建方法都返回一致的结果结构:
|
|
512
|
+
|
|
513
|
+
```javascript
|
|
514
|
+
{
|
|
515
|
+
success: true,
|
|
516
|
+
buffer: Buffer, // 创建的图像缓冲区
|
|
517
|
+
metadata: {
|
|
518
|
+
format: "JPEG", // 输出格式
|
|
519
|
+
outputDimensions: { // 最终图像尺寸
|
|
520
|
+
width: 1920,
|
|
521
|
+
height: 1280
|
|
522
|
+
},
|
|
523
|
+
fileSize: {
|
|
524
|
+
original: 50331648, // 原始处理图像大小
|
|
525
|
+
compressed: 245760, // 缓冲区大小
|
|
526
|
+
compressionRatio: "204.8" // 压缩比
|
|
527
|
+
},
|
|
528
|
+
processing: {
|
|
529
|
+
timeMs: "45.23", // 处理时间
|
|
530
|
+
throughputMBps: "15.4" // 处理吞吐量
|
|
531
|
+
},
|
|
532
|
+
options: { // 应用的选项
|
|
533
|
+
quality: 85,
|
|
534
|
+
width: 1920,
|
|
535
|
+
// ... 其他选项
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
#### 性能特征
|
|
542
|
+
|
|
543
|
+
| 格式 | 典型大小(1920px) | 创建时间 | 压缩比 |
|
|
544
|
+
| ---------- | --------------------- | ------------- | ----------------- |
|
|
545
|
+
| JPEG | 80-400KB | 200-500ms | 50-200x |
|
|
546
|
+
| PNG | 1-4MB | 400-800ms | 12-50x |
|
|
547
|
+
| WebP | 50-300KB | 100-300ms | 60-300x |
|
|
548
|
+
| AVIF | 30-150KB | 300-800ms | 100-500x |
|
|
549
|
+
| TIFF (LZW) | 2-8MB | 100-200ms | 6-25x |
|
|
550
|
+
| PPM | 11-45MB | 50-100ms | 1x(未压缩) |
|
|
551
|
+
| 缩略图 | 5-50KB | 50-150ms | 200-1000x |
|
|
552
|
+
|
|
553
|
+
## 🆕 JPEG 转换(增强功能)
|
|
554
|
+
|
|
555
|
+
### 高性能 RAW 转 JPEG 转换
|
|
556
|
+
|
|
557
|
+
将 RAW 文件转换为优化的 JPEG 格式,具有高级压缩选项和智能设置分析。
|
|
558
|
+
|
|
559
|
+
#### 基本 JPEG 转换
|
|
560
|
+
|
|
561
|
+
```javascript
|
|
562
|
+
const processor = new LibRaw();
|
|
563
|
+
await processor.loadFile("photo.cr2");
|
|
564
|
+
|
|
565
|
+
// 使用默认设置的基本转换
|
|
566
|
+
const result = await processor.convertToJPEG("output.jpg");
|
|
567
|
+
|
|
568
|
+
// 使用自定义选项的高质量转换
|
|
569
|
+
const result = await processor.convertToJPEG("high-quality.jpg", {
|
|
570
|
+
quality: 95, // JPEG 质量(1-100)
|
|
571
|
+
chromaSubsampling: "4:2:2", // 更好的色度用于打印
|
|
572
|
+
trellisQuantisation: true, // 高级压缩
|
|
573
|
+
optimizeCoding: true, // 霍夫曼优化
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
console.log(`文件大小:${result.metadata.fileSize.compressed / 1024}KB`);
|
|
577
|
+
console.log(`压缩率:${result.metadata.fileSize.compressionRatio}x`);
|
|
578
|
+
console.log(`处理时间:${result.metadata.processing.timeMs}ms`);
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
#### 网络优化的调整大小转换
|
|
582
|
+
|
|
583
|
+
```javascript
|
|
584
|
+
// 为网络使用转换和调整大小
|
|
585
|
+
const webResult = await processor.convertToJPEG("web-optimized.jpg", {
|
|
586
|
+
quality: 80, // 网络使用的良好质量
|
|
587
|
+
width: 1920, // 调整到 1920px 宽度(保持宽高比)
|
|
588
|
+
progressive: true, // 渐进式加载
|
|
589
|
+
mozjpeg: true, // 卓越的压缩算法
|
|
590
|
+
optimizeScans: true, // 优化以更快加载
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
// 创建缩略图
|
|
594
|
+
const thumbResult = await processor.convertToJPEG("thumbnail.jpg", {
|
|
595
|
+
quality: 85,
|
|
596
|
+
width: 400,
|
|
597
|
+
height: 300,
|
|
598
|
+
chromaSubsampling: "4:2:2", // 小图像的更好质量
|
|
599
|
+
});
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
#### AI 驱动的优化设置
|
|
603
|
+
|
|
604
|
+
```javascript
|
|
605
|
+
// 分析图像并获取推荐设置
|
|
606
|
+
const analysis = await processor.getOptimalJPEGSettings({ usage: "web" });
|
|
607
|
+
|
|
608
|
+
console.log("推荐设置:", analysis.recommended);
|
|
609
|
+
console.log("图像分析:", analysis.imageAnalysis);
|
|
610
|
+
|
|
611
|
+
// 应用推荐设置
|
|
612
|
+
const optimizedResult = await processor.convertToJPEG(
|
|
613
|
+
"optimized.jpg",
|
|
614
|
+
analysis.recommended
|
|
615
|
+
);
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
#### 批量转换
|
|
619
|
+
|
|
620
|
+
```javascript
|
|
621
|
+
// 使用优化设置转换多个 RAW 文件
|
|
622
|
+
const inputFiles = ["photo1.cr2", "photo2.nef", "photo3.arw"];
|
|
623
|
+
const outputDir = "./jpeg-output";
|
|
624
|
+
|
|
625
|
+
const batchResult = await processor.batchConvertToJPEG(inputFiles, outputDir, {
|
|
626
|
+
quality: 80,
|
|
627
|
+
width: 1920,
|
|
628
|
+
progressive: true,
|
|
629
|
+
mozjpeg: true,
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
console.log(
|
|
633
|
+
`已处理:${batchResult.summary.processed}/${batchResult.summary.total}`
|
|
634
|
+
);
|
|
635
|
+
console.log(
|
|
636
|
+
`成功率:${(
|
|
637
|
+
(batchResult.summary.processed / batchResult.summary.total) *
|
|
638
|
+
100
|
|
639
|
+
).toFixed(1)}%`
|
|
640
|
+
);
|
|
641
|
+
console.log(
|
|
642
|
+
`节省空间:${(
|
|
643
|
+
(batchResult.summary.totalOriginalSize -
|
|
644
|
+
batchResult.summary.totalCompressedSize) /
|
|
645
|
+
1024 /
|
|
646
|
+
1024
|
|
647
|
+
).toFixed(1)}MB`
|
|
648
|
+
);
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
### JPEG 转换选项
|
|
652
|
+
|
|
653
|
+
| 选项 | 类型 | 默认值 | 描述 |
|
|
654
|
+
| --------------------- | ------- | ------- | ---------------------------------------------------- |
|
|
655
|
+
| `quality` | number | 85 | JPEG 质量(1-100,越高质量越好) |
|
|
656
|
+
| `width` | number | - | 目标宽度(像素,保持宽高比) |
|
|
657
|
+
| `height` | number | - | 目标高度(像素,保持宽高比) |
|
|
658
|
+
| `progressive` | boolean | false | 启用渐进式 JPEG 用于网络优化 |
|
|
659
|
+
| `mozjpeg` | boolean | true | 使用 MozJPEG 编码器获得卓越压缩 |
|
|
660
|
+
| `chromaSubsampling` | string | '4:2:0' | 色度子采样('4:4:4', '4:2:2'\*, '4:2:0') |
|
|
661
|
+
| `trellisQuantisation` | boolean | false | 高级压缩技术 |
|
|
662
|
+
| `optimizeScans` | boolean | false | 优化扫描顺序用于渐进式加载 |
|
|
663
|
+
| `optimizeCoding` | boolean | true | 优化霍夫曼编码表 |
|
|
664
|
+
| `colorSpace` | string | 'srgb' | 输出色彩空间('srgb', 'rec2020', 'p3', 'cmyk') |
|
|
665
|
+
|
|
666
|
+
\*注意:由于 Sharp 库限制,'4:2:2' 色度子采样自动映射到 '4:4:4'。
|
|
667
|
+
|
|
668
|
+
### 性能特征
|
|
669
|
+
|
|
670
|
+
- **处理速度**:在现代硬件上 70-140 MB/s
|
|
671
|
+
- **压缩比**:典型压缩 2-10x(因内容而异)
|
|
672
|
+
- **内存效率**:大文件的流式处理
|
|
673
|
+
- **质量保持**:Q85+ 设置下视觉无损
|
|
674
|
+
|
|
675
|
+
### 使用预设
|
|
676
|
+
|
|
677
|
+
#### 网络优化
|
|
678
|
+
|
|
679
|
+
```javascript
|
|
680
|
+
{
|
|
681
|
+
quality: 80,
|
|
682
|
+
width: 1920,
|
|
683
|
+
progressive: true,
|
|
684
|
+
mozjpeg: true,
|
|
685
|
+
chromaSubsampling: '4:2:0',
|
|
686
|
+
optimizeScans: true
|
|
687
|
+
}
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
#### 打印质量
|
|
691
|
+
|
|
692
|
+
```javascript
|
|
693
|
+
{
|
|
694
|
+
quality: 95,
|
|
695
|
+
chromaSubsampling: '4:2:2',
|
|
696
|
+
trellisQuantisation: true,
|
|
697
|
+
optimizeCoding: true,
|
|
698
|
+
mozjpeg: true
|
|
699
|
+
}
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
#### 归档/最大质量
|
|
703
|
+
|
|
704
|
+
```javascript
|
|
705
|
+
{
|
|
706
|
+
quality: 98,
|
|
707
|
+
chromaSubsampling: '4:4:4',
|
|
708
|
+
trellisQuantisation: true,
|
|
709
|
+
optimizeCoding: true
|
|
710
|
+
}
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
#### 缩略图生成
|
|
714
|
+
|
|
715
|
+
```javascript
|
|
716
|
+
{
|
|
717
|
+
quality: 85,
|
|
718
|
+
width: 800,
|
|
719
|
+
chromaSubsampling: '4:2:2',
|
|
720
|
+
mozjpeg: true
|
|
721
|
+
}
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
### 命令行工具
|
|
725
|
+
|
|
726
|
+
#### 单个文件转换
|
|
727
|
+
|
|
728
|
+
```bash
|
|
729
|
+
node examples/jpeg-conversion-example.js photo.cr2
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
#### 批量转换
|
|
733
|
+
|
|
734
|
+
```bash
|
|
735
|
+
# 网络优化的批量转换
|
|
736
|
+
node scripts/batch-jpeg-conversion.js ./raw-photos ./web-gallery 1
|
|
737
|
+
|
|
738
|
+
# 打印质量转换
|
|
739
|
+
node scripts/batch-jpeg-conversion.js ./raw-photos ./print-gallery 2
|
|
740
|
+
|
|
741
|
+
# 归档质量转换
|
|
742
|
+
node scripts/batch-jpeg-conversion.js ./raw-photos ./archive-gallery 3
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
#### NPM 脚本
|
|
746
|
+
|
|
747
|
+
```bash
|
|
748
|
+
# 运行 JPEG 转换测试
|
|
749
|
+
npm run test:jpeg-conversion
|
|
750
|
+
|
|
751
|
+
# 使用 CLI 界面批量转换
|
|
752
|
+
npm run convert:jpeg <input-dir> [output-dir] [preset]
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
````
|
|
756
|
+
|
|
757
|
+
## API 参考
|
|
758
|
+
|
|
759
|
+
### 文件操作
|
|
760
|
+
|
|
761
|
+
#### `new LibRaw()`
|
|
762
|
+
|
|
763
|
+
创建一个新的 LibRaw 处理器实例。
|
|
764
|
+
|
|
765
|
+
#### `loadFile(filename)`
|
|
766
|
+
|
|
767
|
+
从文件系统加载 RAW 文件。
|
|
768
|
+
|
|
769
|
+
- **filename** `{string}` - RAW 文件路径
|
|
770
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
771
|
+
|
|
772
|
+
#### `loadBuffer(buffer)`
|
|
773
|
+
|
|
774
|
+
从内存缓冲区加载 RAW 数据。
|
|
775
|
+
|
|
776
|
+
- **buffer** `{Buffer}` - 包含 RAW 数据的缓冲区
|
|
777
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
778
|
+
|
|
779
|
+
#### `close()`
|
|
780
|
+
|
|
781
|
+
关闭处理器并释放所有资源。
|
|
782
|
+
|
|
783
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
784
|
+
|
|
785
|
+
### 元数据和信息
|
|
786
|
+
|
|
787
|
+
#### `getMetadata()`
|
|
788
|
+
|
|
789
|
+
从加载的 RAW 文件中提取基本元数据。
|
|
790
|
+
|
|
791
|
+
- **返回** `{Promise<Object>}` - 包含以下内容的元数据对象:
|
|
792
|
+
```javascript
|
|
793
|
+
{
|
|
794
|
+
make: 'Canon', // 相机制造商
|
|
795
|
+
model: 'EOS R5', // 相机型号
|
|
796
|
+
software: '1.3.1', // 相机软件版本
|
|
797
|
+
width: 8192, // 处理后的图像宽度
|
|
798
|
+
height: 5464, // 处理后的图像高度
|
|
799
|
+
rawWidth: 8280, // RAW 传感器宽度
|
|
800
|
+
rawHeight: 5520, // RAW 传感器高度
|
|
801
|
+
colors: 3, // 颜色通道数
|
|
802
|
+
filters: 0x94949494, // 颜色滤镜模式
|
|
803
|
+
iso: 800, // ISO 感光度
|
|
804
|
+
shutterSpeed: 0.004, // 快门速度(秒)
|
|
805
|
+
aperture: 2.8, // 光圈 f 值
|
|
806
|
+
focalLength: 85, // 焦距(毫米)
|
|
807
|
+
timestamp: 1640995200 // 拍摄时间戳(Unix)
|
|
808
|
+
}
|
|
809
|
+
````
|
|
810
|
+
|
|
811
|
+
#### `getImageSize()`
|
|
812
|
+
|
|
813
|
+
获取详细的图像尺寸和边距信息。
|
|
814
|
+
|
|
815
|
+
- **返回** `{Promise<Object>}` - 尺寸信息:
|
|
816
|
+
```javascript
|
|
817
|
+
{
|
|
818
|
+
width: 8192, // 处理后的图像宽度
|
|
819
|
+
height: 5464, // 处理后的图像高度
|
|
820
|
+
rawWidth: 8280, // RAW 传感器宽度
|
|
821
|
+
rawHeight: 5520, // RAW 传感器高度
|
|
822
|
+
topMargin: 16, // 顶部边距(像素)
|
|
823
|
+
leftMargin: 24, // 左侧边距(像素)
|
|
824
|
+
iWidth: 8192, // 内部处理宽度
|
|
825
|
+
iHeight: 5464 // 内部处理高度
|
|
826
|
+
}
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
#### `getAdvancedMetadata()`
|
|
830
|
+
|
|
831
|
+
获取高级元数据,包括色彩矩阵和校准数据。
|
|
832
|
+
|
|
833
|
+
- **返回** `{Promise<Object>}` - 包含色彩矩阵、黑电平等的高级元数据
|
|
834
|
+
|
|
835
|
+
#### `getLensInfo()`
|
|
836
|
+
|
|
837
|
+
从 RAW 文件中获取镜头信息。
|
|
838
|
+
|
|
839
|
+
- **返回** `{Promise<Object>}` - 包含名称、焦距范围、序列号的镜头信息
|
|
840
|
+
|
|
841
|
+
#### `getColorInfo()`
|
|
842
|
+
|
|
843
|
+
获取色彩信息,包括白平衡和色彩矩阵。
|
|
844
|
+
|
|
845
|
+
- **返回** `{Promise<Object>}` - 包含 RGB 矩阵和乘数的色彩信息
|
|
846
|
+
|
|
847
|
+
### 图像处理
|
|
848
|
+
|
|
849
|
+
#### `subtractBlack()`
|
|
850
|
+
|
|
851
|
+
从 RAW 数据中减去黑电平。
|
|
852
|
+
|
|
853
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
854
|
+
|
|
855
|
+
#### `raw2Image()`
|
|
856
|
+
|
|
857
|
+
将 RAW 数据转换为图像格式。
|
|
858
|
+
|
|
859
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
860
|
+
|
|
861
|
+
#### `adjustMaximum()`
|
|
862
|
+
|
|
863
|
+
调整图像数据中的最大值。
|
|
864
|
+
|
|
865
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
866
|
+
|
|
867
|
+
#### `processImage()`
|
|
868
|
+
|
|
869
|
+
使用当前设置执行完整的图像处理。
|
|
870
|
+
|
|
871
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
872
|
+
|
|
873
|
+
#### `unpackThumbnail()`
|
|
874
|
+
|
|
875
|
+
从 RAW 文件中解包缩略图数据。
|
|
876
|
+
|
|
877
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
878
|
+
|
|
879
|
+
### 内存操作
|
|
880
|
+
|
|
881
|
+
#### `createMemoryImage()`
|
|
882
|
+
|
|
883
|
+
在内存中创建处理后的图像。
|
|
884
|
+
|
|
885
|
+
- **返回** `{Promise<Object>}` - 图像数据对象:
|
|
886
|
+
```javascript
|
|
887
|
+
{
|
|
888
|
+
type: 2, // 图像类型(1=JPEG, 2=TIFF)
|
|
889
|
+
width: 8192, // 图像宽度
|
|
890
|
+
height: 5464, // 图像高度
|
|
891
|
+
colors: 3, // 颜色通道数
|
|
892
|
+
bits: 16, // 每样本位数
|
|
893
|
+
dataSize: 268435456, // 数据大小(字节)
|
|
894
|
+
data: Buffer // 图像数据缓冲区
|
|
895
|
+
}
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
#### `createMemoryThumbnail()`
|
|
899
|
+
|
|
900
|
+
在内存中创建缩略图图像。
|
|
901
|
+
|
|
902
|
+
- **返回** `{Promise<Object>}` - 与上述结构相同的缩略图数据对象
|
|
903
|
+
|
|
904
|
+
### 文件写入器
|
|
905
|
+
|
|
906
|
+
#### `writePPM(filename)`
|
|
907
|
+
|
|
908
|
+
将处理后的图像写入为 PPM 文件。
|
|
909
|
+
|
|
910
|
+
- **filename** `{string}` - 输出文件名
|
|
911
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
912
|
+
|
|
913
|
+
#### `writeTIFF(filename)`
|
|
914
|
+
|
|
915
|
+
将处理后的图像写入为 TIFF 文件。
|
|
916
|
+
|
|
917
|
+
- **filename** `{string}` - 输出文件名
|
|
918
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
919
|
+
|
|
920
|
+
#### `writeThumbnail(filename)`
|
|
921
|
+
|
|
922
|
+
将缩略图写入文件。
|
|
923
|
+
|
|
924
|
+
- **filename** `{string}` - 输出文件名
|
|
925
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
926
|
+
|
|
927
|
+
### 配置
|
|
928
|
+
|
|
929
|
+
#### `setOutputParams(params)`
|
|
930
|
+
|
|
931
|
+
设置图像处理的输出参数。
|
|
932
|
+
|
|
933
|
+
- **params** `{Object}` - 参数对象:
|
|
934
|
+
```javascript
|
|
935
|
+
{
|
|
936
|
+
gamma: [2.2, 4.5], // 伽马校正 [功率, 斜率]
|
|
937
|
+
bright: 1.0, // 亮度调整
|
|
938
|
+
output_color: 1, // 输出色彩空间 (0=raw, 1=sRGB, 2=Adobe RGB)
|
|
939
|
+
output_bps: 8, // 输出每样本位数 (8 或 16)
|
|
940
|
+
user_mul: [1,1,1,1], // 用户白平衡乘数
|
|
941
|
+
no_auto_bright: false, // 禁用自动亮度
|
|
942
|
+
highlight: 0, // 高光恢复模式 (0-9)
|
|
943
|
+
output_tiff: false // 输出 TIFF 格式
|
|
944
|
+
}
|
|
945
|
+
```
|
|
946
|
+
- **返回** `{Promise<boolean>}` - 成功状态
|
|
947
|
+
|
|
948
|
+
#### `getOutputParams()`
|
|
949
|
+
|
|
950
|
+
获取当前输出参数。
|
|
951
|
+
|
|
952
|
+
- **返回** `{Promise<Object>}` - 当前参数设置
|
|
953
|
+
|
|
954
|
+
### 实用工具函数
|
|
955
|
+
|
|
956
|
+
#### `isFloatingPoint()`
|
|
957
|
+
|
|
958
|
+
检查图像是否使用浮点数据。
|
|
959
|
+
|
|
960
|
+
- **返回** `{Promise<boolean>}` - 浮点状态
|
|
961
|
+
|
|
962
|
+
#### `isFujiRotated()`
|
|
963
|
+
|
|
964
|
+
检查图像是否为富士旋转(45度传感器旋转)。
|
|
965
|
+
|
|
966
|
+
- **返回** `{Promise<boolean>}` - 富士旋转状态
|
|
967
|
+
|
|
968
|
+
#### `isSRAW()`
|
|
969
|
+
|
|
970
|
+
检查图像是否为 sRAW 格式。
|
|
971
|
+
|
|
972
|
+
- **返回** `{Promise<boolean>}` - sRAW 格式状态
|
|
973
|
+
|
|
974
|
+
#### `isJPEGThumb()`
|
|
975
|
+
|
|
976
|
+
检查缩略图是否为 JPEG 格式。
|
|
977
|
+
|
|
978
|
+
- **返回** `{Promise<boolean>}` - JPEG 缩略图状态
|
|
979
|
+
|
|
980
|
+
#### `errorCount()`
|
|
981
|
+
|
|
982
|
+
获取处理过程中遇到的错误数量。
|
|
983
|
+
|
|
984
|
+
- **返回** `{Promise<number>}` - 错误计数
|
|
985
|
+
|
|
986
|
+
### 静态方法
|
|
987
|
+
|
|
988
|
+
#### `LibRaw.getVersion()`
|
|
989
|
+
|
|
990
|
+
获取 LibRaw 库版本。
|
|
991
|
+
|
|
992
|
+
- **返回** `{string}` - 版本字符串(例如:"0.21.4-Release")
|
|
993
|
+
|
|
994
|
+
#### `LibRaw.getCapabilities()`
|
|
995
|
+
|
|
996
|
+
获取 LibRaw 库功能作为位掩码。
|
|
997
|
+
|
|
998
|
+
- **返回** `{number}` - 功能标志
|
|
999
|
+
|
|
1000
|
+
#### `LibRaw.getCameraList()`
|
|
1001
|
+
|
|
1002
|
+
获取所有支持的相机型号列表。
|
|
1003
|
+
|
|
1004
|
+
- **返回** `{string[]}` - 相机型号名称数组
|
|
1005
|
+
|
|
1006
|
+
#### `LibRaw.getCameraCount()`
|
|
1007
|
+
|
|
1008
|
+
获取支持的相机型号数量。
|
|
1009
|
+
|
|
1010
|
+
- **返回** `{number}` - 相机数量(通常 1000+)
|
|
1011
|
+
|
|
1012
|
+
#### `LibRaw.isRawFile(filePath)` 🆕
|
|
1013
|
+
|
|
1014
|
+
检查文件是否为 LibRaw 支持的 RAW 格式。
|
|
1015
|
+
|
|
1016
|
+
- **filePath** `{string}` - 要检查的文件路径
|
|
1017
|
+
- **返回** `{Object}` - 检查结果对象:
|
|
1018
|
+
```javascript
|
|
1019
|
+
{
|
|
1020
|
+
isRawFile: boolean, // 是否为 LibRaw 支持的 RAW 文件
|
|
1021
|
+
success: boolean, // 检查是否成功
|
|
1022
|
+
message: string, // 详细信息
|
|
1023
|
+
errorCode?: number // 错误代码(仅失败时)
|
|
1024
|
+
}
|
|
1025
|
+
```
|
|
1026
|
+
|
|
1027
|
+
**示例:**
|
|
1028
|
+
|
|
1029
|
+
```javascript
|
|
1030
|
+
// 检查单个文件
|
|
1031
|
+
const result = LibRaw.isRawFile('photo.cr2');
|
|
1032
|
+
if (result.isRawFile) {
|
|
1033
|
+
console.log('✅ 这是 LibRaw 支持的 RAW 文件');
|
|
1034
|
+
} else {
|
|
1035
|
+
console.log('❌ 不是支持的 RAW 文件:', result.message);
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
// 过滤目录中的 RAW 文件
|
|
1039
|
+
const files = fs.readdirSync(dir);
|
|
1040
|
+
const rawFiles = files.filter(file =>
|
|
1041
|
+
LibRaw.isRawFile(path.join(dir, file)).isRawFile
|
|
1042
|
+
);
|
|
1043
|
+
|
|
1044
|
+
// 上传前验证
|
|
1045
|
+
if (!LibRaw.isRawFile(uploadedFile).isRawFile) {
|
|
1046
|
+
throw new Error('请上传 LibRaw 支持的 RAW 格式文件');
|
|
1047
|
+
}
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
**优势:**
|
|
1051
|
+
- ✅ 智能识别 - 利用 LibRaw 内部机制,支持 100+ 种 RAW 格式
|
|
1052
|
+
- ✅ 无需维护 - 不需要手动维护扩展名列表
|
|
1053
|
+
- ✅ 轻量级 - 只进行格式识别,不完全加载文件
|
|
1054
|
+
- ✅ 准确可靠 - 基于文件内容判断,而非仅靠扩展名
|
|
1055
|
+
|
|
1056
|
+
## 测试
|
|
1057
|
+
|
|
1058
|
+
该库包含涵盖所有主要功能的全面测试套件:
|
|
1059
|
+
|
|
1060
|
+
### 快速测试
|
|
1061
|
+
|
|
1062
|
+
```bash
|
|
1063
|
+
# 基本功能测试
|
|
1064
|
+
npm run test:quick
|
|
1065
|
+
|
|
1066
|
+
# 全面的 API 覆盖测试
|
|
1067
|
+
npm run test:comprehensive
|
|
1068
|
+
|
|
1069
|
+
# 新的缓冲区创建方法测试
|
|
1070
|
+
npm run test:buffer-creation
|
|
1071
|
+
|
|
1072
|
+
# 单独的测试套件
|
|
1073
|
+
npm run test:image-processing # 图像转换和处理
|
|
1074
|
+
npm run test:format-conversion # 输出格式和色彩空间
|
|
1075
|
+
npm run test:thumbnail-extraction # 缩略图操作
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
### 高级测试
|
|
1079
|
+
|
|
1080
|
+
```bash
|
|
1081
|
+
# 使用示例图像测试(如果可用)
|
|
1082
|
+
npm run test:samples
|
|
1083
|
+
npm run test:compare
|
|
1084
|
+
|
|
1085
|
+
# 性能基准测试
|
|
1086
|
+
npm run test:performance
|
|
1087
|
+
|
|
1088
|
+
# 测试所有支持的格式
|
|
1089
|
+
npm run test:formats
|
|
1090
|
+
|
|
1091
|
+
# 缓冲区创建测试套件
|
|
1092
|
+
npm run test:buffer-creation # 全面的缓冲区方法测试
|
|
1093
|
+
|
|
1094
|
+
# 使用您自己的 RAW 文件测试
|
|
1095
|
+
npm test path/to/your/photo.cr2
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
### 测试覆盖
|
|
1099
|
+
|
|
1100
|
+
测试套件提供全面的验证:
|
|
1101
|
+
|
|
1102
|
+
- ✅ **测试了 21 个 RAW 文件**(佳能 CR3、尼康 NEF、索尼 ARW、富士 RAF、松下 RW2、徕卡 DNG)
|
|
1103
|
+
- ✅ **100% 缩略图提取成功率**
|
|
1104
|
+
- ✅ **100% 缓冲区创建成功率**(7 个新的缓冲区方法)
|
|
1105
|
+
- ✅ **验证了 6 个相机品牌**(佳能、尼康、索尼、富士、松下、徕卡)
|
|
1106
|
+
- ✅ **测试了多种输出格式**(PPM、TIFF、JPEG、PNG、WebP、AVIF 缓冲区)
|
|
1107
|
+
- ✅ **色彩空间转换**(sRGB、Adobe RGB、宽色域、ProPhoto、XYZ)
|
|
1108
|
+
- ✅ **位深度变化**(8 位、16 位处理)
|
|
1109
|
+
- ✅ **内存操作**(缓冲区管理、图像复制、直接缓冲区创建)
|
|
1110
|
+
- ✅ **错误处理**(无效文件、损坏数据、参数验证)
|
|
1111
|
+
- ✅ **性能基准测试**(缓冲区创建速度和压缩比)
|
|
1112
|
+
|
|
1113
|
+
## 缩略图提取
|
|
1114
|
+
|
|
1115
|
+
从 RAW 文件中提取高质量缩略图:
|
|
1116
|
+
|
|
1117
|
+
```javascript
|
|
1118
|
+
const LibRaw = require("librawspeed-full");
|
|
1119
|
+
|
|
1120
|
+
async function extractThumbnails() {
|
|
1121
|
+
const processor = new LibRaw();
|
|
1122
|
+
|
|
1123
|
+
try {
|
|
1124
|
+
await processor.loadFile("photo.cr2");
|
|
1125
|
+
|
|
1126
|
+
// 检查缩略图是否存在
|
|
1127
|
+
const hasThumb = await processor.thumbOK();
|
|
1128
|
+
if (hasThumb) {
|
|
1129
|
+
// 提取缩略图
|
|
1130
|
+
await processor.unpackThumbnail();
|
|
1131
|
+
|
|
1132
|
+
// 获取缩略图数据
|
|
1133
|
+
const thumbData = await processor.createMemoryThumbnail();
|
|
1134
|
+
console.log(
|
|
1135
|
+
`缩略图:${thumbData.width}x${thumbData.height},${thumbData.dataSize} 字节`
|
|
1136
|
+
);
|
|
1137
|
+
|
|
1138
|
+
// 保存到文件
|
|
1139
|
+
await processor.writeThumbnail("thumbnail.jpg");
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
await processor.close();
|
|
1143
|
+
} catch (error) {
|
|
1144
|
+
console.error("错误:", error.message);
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
```
|
|
1148
|
+
|
|
1149
|
+
### 批量缩略图提取
|
|
1150
|
+
|
|
1151
|
+
从所有 RAW 文件中提取缩略图:
|
|
1152
|
+
|
|
1153
|
+
```bash
|
|
1154
|
+
# 从 sample-images/ 中的所有 RAW 文件提取缩略图
|
|
1155
|
+
npm run extract:thumbnails
|
|
1156
|
+
```
|
|
1157
|
+
|
|
1158
|
+
这将创建:
|
|
1159
|
+
|
|
1160
|
+
- 在 `sample-images/thumbnails/` 中的单独 JPEG 缩略图
|
|
1161
|
+
- 交互式画廊查看器(`index.html`)
|
|
1162
|
+
- 全面的提取报告
|
|
1163
|
+
|
|
1164
|
+
**示例结果:**
|
|
1165
|
+
|
|
1166
|
+
- **21/21 文件成功处理**(100% 成功率)
|
|
1167
|
+
- **格式:** CR3、NEF、ARW、RAF、RW2、DNG
|
|
1168
|
+
- **质量:** 380KB - 13.4MB 缩略图(保持原始质量)
|
|
1169
|
+
- **性能:** 平均提取时间约 50ms
|
|
1170
|
+
|
|
1171
|
+
## 示例输出
|
|
1172
|
+
|
|
1173
|
+
```
|
|
1174
|
+
📁 加载 RAW 文件:DSC_0006.NEF
|
|
1175
|
+
📊 提取元数据...
|
|
1176
|
+
|
|
1177
|
+
📷 相机信息:
|
|
1178
|
+
制造商:尼康
|
|
1179
|
+
型号:D5600
|
|
1180
|
+
|
|
1181
|
+
📐 图像尺寸:
|
|
1182
|
+
处理后:6016 x 4016
|
|
1183
|
+
RAW:6016 x 4016
|
|
1184
|
+
|
|
1185
|
+
🎯 拍摄参数:
|
|
1186
|
+
ISO:200
|
|
1187
|
+
光圈:f/6.3
|
|
1188
|
+
快门速度:1/250s
|
|
1189
|
+
焦距:300mm
|
|
1190
|
+
|
|
1191
|
+
🎨 色彩信息:
|
|
1192
|
+
颜色:3
|
|
1193
|
+
滤镜:0xb4b4b4b4
|
|
1194
|
+
|
|
1195
|
+
📅 拍摄日期:2025-06-05T09:48:18.000Z
|
|
1196
|
+
|
|
1197
|
+
✅ 完成!
|
|
1198
|
+
```
|
|
1199
|
+
|
|
1200
|
+
## 项目结构
|
|
1201
|
+
|
|
1202
|
+
```
|
|
1203
|
+
librawspeed-full/
|
|
1204
|
+
├── src/ # C++ 源文件
|
|
1205
|
+
│ ├── addon.cpp # 主要插件入口点
|
|
1206
|
+
│ ├── libraw_wrapper.cpp # LibRaw C++ 包装器(50+ 方法)
|
|
1207
|
+
│ └── libraw_wrapper.h # 头文件
|
|
1208
|
+
├── lib/ # JavaScript 接口
|
|
1209
|
+
│ └── index.js # 主要模块导出
|
|
1210
|
+
├── test/ # 全面的测试套件
|
|
1211
|
+
│ ├── image-processing.test.js # 图像转换测试
|
|
1212
|
+
│ ├── format-conversion.test.js # 格式和色彩空间测试
|
|
1213
|
+
│ ├── thumbnail-extraction.test.js # 缩略图操作测试
|
|
1214
|
+
│ ├── comprehensive.test.js # 组合测试运行器
|
|
1215
|
+
│ ├── performance.test.js # 性能基准测试
|
|
1216
|
+
│ └── all-formats.test.js # 多格式验证
|
|
1217
|
+
├── scripts/ # 实用工具脚本
|
|
1218
|
+
│ └── extract-thumbnails.js # 批量缩略图提取器
|
|
1219
|
+
├── examples/ # 使用示例
|
|
1220
|
+
│ ├── basic-example.js # 基本使用演示
|
|
1221
|
+
│ └── advanced-demo.js # 高级处理示例
|
|
1222
|
+
├── sample-images/ # 示例 RAW 文件和结果
|
|
1223
|
+
│ ├── thumbnails/ # 提取的缩略图画廊
|
|
1224
|
+
│ │ ├── index.html # 交互式查看器
|
|
1225
|
+
│ │ ├── README.md # 提取文档
|
|
1226
|
+
│ │ └── *.jpg # 21 个提取的缩略图
|
|
1227
|
+
│ └── *.{CR3,NEF,ARW,RAF,RW2,DNG} # 测试 RAW 文件
|
|
1228
|
+
├── docs/ # 文档
|
|
1229
|
+
│ └── TESTING.md # 全面的测试指南
|
|
1230
|
+
├── deps/ # 依赖项
|
|
1231
|
+
│ └── LibRaw-Source/ # LibRaw 源代码(跨平台)
|
|
1232
|
+
│ └── LibRaw-0.21.4/
|
|
1233
|
+
│ └── build/ # 交叉编译的库
|
|
1234
|
+
│ ├── win32/ # Windows x64
|
|
1235
|
+
│ ├── darwin-x64/ # macOS Intel
|
|
1236
|
+
│ ├── darwin-arm64/ # macOS Apple Silicon
|
|
1237
|
+
│ └── linux-x64/ # Linux x64
|
|
1238
|
+
├── binding.gyp # 构建配置
|
|
1239
|
+
├── package.json # 项目配置
|
|
1240
|
+
└── README.md # 此文件
|
|
1241
|
+
```
|
|
1242
|
+
|
|
1243
|
+
## 开发
|
|
1244
|
+
|
|
1245
|
+
### 从源码构建
|
|
1246
|
+
|
|
1247
|
+
```bash
|
|
1248
|
+
# 清理之前的构建
|
|
1249
|
+
npm run clean
|
|
1250
|
+
|
|
1251
|
+
# 重新构建
|
|
1252
|
+
npm run build
|
|
1253
|
+
|
|
1254
|
+
# 测试构建
|
|
1255
|
+
npm run test:quick
|
|
1256
|
+
```
|
|
1257
|
+
|
|
1258
|
+
### 添加新功能
|
|
1259
|
+
|
|
1260
|
+
1. 在 `src/` 中添加 C++ 实现
|
|
1261
|
+
2. 在 `lib/` 中更新 JavaScript 包装器
|
|
1262
|
+
3. 在 `test/` 中添加测试
|
|
1263
|
+
4. 更新文档
|
|
1264
|
+
|
|
1265
|
+
## 贡献
|
|
1266
|
+
|
|
1267
|
+
1. Fork 仓库
|
|
1268
|
+
2. 创建功能分支(`git checkout -b feature/amazing-feature`)
|
|
1269
|
+
3. 提交您的更改(`git commit -m 'Add amazing feature'`)
|
|
1270
|
+
4. 推送到分支(`git push origin feature/amazing-feature`)
|
|
1271
|
+
5. 打开 Pull Request
|
|
1272
|
+
|
|
1273
|
+
## 路线图
|
|
1274
|
+
|
|
1275
|
+
### 版本 1.0(当前 - 生产就绪)
|
|
1276
|
+
|
|
1277
|
+
- ✅ RAW 文件加载和元数据提取
|
|
1278
|
+
- ✅ 全面的 EXIF 数据访问
|
|
1279
|
+
- ✅ 内存高效处理
|
|
1280
|
+
- ✅ 基于 Promise 的 API
|
|
1281
|
+
- ✅ **缩略图提取(100% 成功率)**
|
|
1282
|
+
- ✅ **图像处理管道**
|
|
1283
|
+
- ✅ **多种输出格式(PPM、TIFF)**
|
|
1284
|
+
- ✅ **实现了 50+ LibRaw 方法**
|
|
1285
|
+
- ✅ **全面的测试覆盖**
|
|
1286
|
+
- ✅ **验证了 6 个相机品牌**
|
|
1287
|
+
- ✅ **生产就绪的稳定性**
|
|
1288
|
+
|
|
1289
|
+
### 版本 2.0(计划中)
|
|
1290
|
+
|
|
1291
|
+
- 🔄 高级图像滤镜和调整
|
|
1292
|
+
- 🔄 批量处理优化
|
|
1293
|
+
- 🔄 额外的输出格式(JPEG、PNG)
|
|
1294
|
+
- 🔄 色彩配置文件管理
|
|
1295
|
+
- 🔄 实时预览生成
|
|
1296
|
+
|
|
1297
|
+
### 版本 3.0(未来)
|
|
1298
|
+
|
|
1299
|
+
- 📋 批量处理功能
|
|
1300
|
+
- 📋 大文件的流式支持
|
|
1301
|
+
- 📋 高级色彩管理
|
|
1302
|
+
- 📋 自定义处理器的插件系统
|
|
1303
|
+
|
|
1304
|
+
## 性能
|
|
1305
|
+
|
|
1306
|
+
LibRaw Node.js 为 RAW 处理提供卓越的性能:
|
|
1307
|
+
|
|
1308
|
+
### 真实世界基准测试(已测试 Windows)
|
|
1309
|
+
|
|
1310
|
+
| 操作 | 文件大小 | 处理时间 | 吞吐量 | 成功率 |
|
|
1311
|
+
| ------------------------- | ---------------- | --------------- | ---------- | ------------ |
|
|
1312
|
+
| **文件加载** | 25MB RAW | 15-30ms | 800MB/s+ | 100% |
|
|
1313
|
+
| **元数据提取** | 任何 RAW | 1-5ms | - | 100% |
|
|
1314
|
+
| **缩略图提取** | 160x120 - 4K | 20-50ms | 400KB/s+ | 100% |
|
|
1315
|
+
| **完整图像处理** | 6000x4000 16位 | 1000-2000ms | 70-140MB/s | 95%+ |
|
|
1316
|
+
| **格式写入 (PPM)** | 144MB 输出 | 200-500ms | 300MB/s+ | 100% |
|
|
1317
|
+
| **格式写入 (TIFF)** | 144MB 输出 | 800-1200ms | 120MB/s+ | 100% |
|
|
1318
|
+
|
|
1319
|
+
### 内存效率
|
|
1320
|
+
|
|
1321
|
+
| 操作 | 峰值内存 | 缓冲区大小 | 清理 |
|
|
1322
|
+
| ------------------------ | ----------- | ------------------- | ---------- |
|
|
1323
|
+
| **RAW 加载** | ~50MB | 25MB 文件缓冲区 | ✅ 自动 |
|
|
1324
|
+
| **图像处理** | ~200MB | 144MB 图像缓冲区 | ✅ 自动 |
|
|
1325
|
+
| **缩略图提取** | ~5MB | 2-13MB 缩略图缓冲区 | ✅ 自动 |
|
|
1326
|
+
| **批量处理** | 恒定 | 无内存泄漏 | ✅ 完美 |
|
|
1327
|
+
|
|
1328
|
+
### 测试结果摘要
|
|
1329
|
+
|
|
1330
|
+
- **✅ 21/21 RAW 文件已处理** 跨越 6 个相机品牌
|
|
1331
|
+
- **✅ 100% 缩略图提取成功**(总共 2.5GB 缩略图)
|
|
1332
|
+
- **✅ 95%+ 图像处理成功**(管道工作流程正常)
|
|
1333
|
+
- **✅ 0 内存泄漏** 在广泛测试中检测到
|
|
1334
|
+
- **✅ 亚秒级** 所有格式的元数据提取
|
|
1335
|
+
|
|
1336
|
+
## 故障排除
|
|
1337
|
+
|
|
1338
|
+
### 构建问题
|
|
1339
|
+
|
|
1340
|
+
**错误:找不到模块 'node-addon-api'**
|
|
1341
|
+
|
|
1342
|
+
```bash
|
|
1343
|
+
npm install node-addon-api
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
**错误:MSBuild.exe 失败,退出代码:1**
|
|
1347
|
+
|
|
1348
|
+
- 安装 Visual Studio Build Tools
|
|
1349
|
+
- 确保 Python 3.x 可用
|
|
1350
|
+
|
|
1351
|
+
**错误:找不到 libraw.dll**
|
|
1352
|
+
|
|
1353
|
+
```bash
|
|
1354
|
+
npm run build # 重新构建并复制 DLL
|
|
1355
|
+
```
|
|
1356
|
+
|
|
1357
|
+
### 运行时问题
|
|
1358
|
+
|
|
1359
|
+
**错误:无法打开文件**
|
|
1360
|
+
|
|
1361
|
+
- 检查文件路径和权限
|
|
1362
|
+
- 验证文件是否为有效的 RAW 格式
|
|
1363
|
+
- 确保文件未损坏
|
|
1364
|
+
|
|
1365
|
+
## 🚀 NPM 发布状态
|
|
1366
|
+
|
|
1367
|
+
**✅ 已发布到 NPM 注册表!**
|
|
1368
|
+
|
|
1369
|
+
- **包**:[`librawspeed-full@1.0.8`](https://www.npmjs.com/package/librawspeed-full)
|
|
1370
|
+
- **发布日期**:2025年8月30日
|
|
1371
|
+
- **总文件数**:487 个文件(4.0 MB 包,18.1 MB 解压后)
|
|
1372
|
+
- **注册表**:[npmjs.com](https://www.npmjs.com/package/librawspeed-full)
|
|
1373
|
+
|
|
1374
|
+
### 安装命令
|
|
1375
|
+
|
|
1376
|
+
```bash
|
|
1377
|
+
npm install librawspeed-full
|
|
1378
|
+
```
|
|
1379
|
+
|
|
1380
|
+
### 下载统计
|
|
1381
|
+
|
|
1382
|
+
- **初始发布**:生产就绪,具有全面的测试覆盖
|
|
1383
|
+
- **平台**:Windows(已测试)、macOS、Linux
|
|
1384
|
+
- **Node.js**:14.0.0+ 兼容
|
|
1385
|
+
|
|
1386
|
+
## 许可证
|
|
1387
|
+
|
|
1388
|
+
此项目在 MIT 许可证下授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
|
|
1389
|
+
|
|
1390
|
+
## 致谢
|
|
1391
|
+
|
|
1392
|
+
- [LibRaw](https://www.libraw.org/) - 强大的 RAW 处理库
|
|
1393
|
+
- [Node-API](https://nodejs.org/api/n-api.html) - Node.js 原生插件接口
|
|
1394
|
+
- [node-gyp](https://github.com/nodejs/node-gyp) - Node.js 原生插件构建工具
|
|
1395
|
+
- **摄影社区** - 提供多样化的 RAW 文件进行全面测试
|
|
1396
|
+
- **相机制造商** - 佳能、尼康、索尼、富士、松下、徕卡提供优秀的 RAW 格式
|
|
1397
|
+
|
|
1398
|
+
### 测试贡献者
|
|
1399
|
+
|
|
1400
|
+
特别感谢使用真实世界 RAW 文件进行的全面测试:
|
|
1401
|
+
|
|
1402
|
+
- **21 个 RAW 文件** 跨越 6 个主要相机品牌
|
|
1403
|
+
- **100% 缩略图提取成功** 验证
|
|
1404
|
+
- **生产级稳定性** 测试和验证
|
|
1405
|
+
|
|
1406
|
+
## 支持
|
|
1407
|
+
|
|
1408
|
+
- 📖 [文档](https://github.com/pixFlowTeam/librawspeed#readme)
|
|
1409
|
+
- 🐛 [问题](https://github.com/pixFlowTeam/librawspeed/issues)
|
|
1410
|
+
- 💬 [讨论](https://github.com/pixFlowTeam/librawspeed/discussions)
|
|
1411
|
+
|
|
1412
|
+
---
|
|
1413
|
+
|
|
1414
|
+
**为摄影和 Node.js 社区用心制作 ❤️**
|