From df5454e7dc582256fb0c29a7d080054d0efedc99 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Mon, 30 Jun 2025 12:14:06 +0100 Subject: [PATCH] Add support for RAW digicam input, requires custom libvips+libraw --- docs/src/content/docs/changelog.md | 2 ++ lib/index.d.ts | 1 + package.json | 4 ++-- src/common.cc | 3 +++ src/common.h | 1 + src/utilities.cc | 2 +- 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/src/content/docs/changelog.md b/docs/src/content/docs/changelog.md index 0a248750..de7d34ca 100644 --- a/docs/src/content/docs/changelog.md +++ b/docs/src/content/docs/changelog.md @@ -18,6 +18,8 @@ Requires libvips v8.17.0 * Expose `keepDuplicateFrames` GIF output parameter. +* Add support for RAW digital camera image input. Requires libvips compiled with libraw support. + * Add `pageHeight` option to `create` and `raw` input for animated images. [#3236](https://github.com/lovell/sharp/issues/3236) diff --git a/lib/index.d.ts b/lib/index.d.ts index 395ec977..ab7825c5 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1890,6 +1890,7 @@ declare namespace sharp { interface FormatEnum { avif: AvailableFormatInfo; + dcraw: AvailableFormatInfo; dz: AvailableFormatInfo; exr: AvailableFormatInfo; fits: AvailableFormatInfo; diff --git a/package.json b/package.json index 2be1d8c3..466584c1 100644 --- a/package.json +++ b/package.json @@ -179,12 +179,12 @@ "icc": "^3.0.0", "jsdoc-to-markdown": "^9.1.1", "license-checker": "^25.0.1", - "mocha": "^11.7.0", + "mocha": "^11.7.1", "node-addon-api": "^8.4.0", "node-gyp": "^11.2.0", "nyc": "^17.1.0", "semistandard": "^17.0.0", - "tar-fs": "^3.0.10", + "tar-fs": "^3.1.0", "tsd": "^0.32.0" }, "license": "Apache-2.0", diff --git a/src/common.cc b/src/common.cc index df779e8b..42e4a442 100644 --- a/src/common.cc +++ b/src/common.cc @@ -284,6 +284,7 @@ namespace sharp { case ImageType::EXR: id = "exr"; break; case ImageType::JXL: id = "jxl"; break; case ImageType::RAD: id = "rad"; break; + case ImageType::DCRAW: id = "dcraw"; break; case ImageType::VIPS: id = "vips"; break; case ImageType::RAW: id = "raw"; break; case ImageType::UNKNOWN: id = "unknown"; break; @@ -332,6 +333,8 @@ namespace sharp { { "VipsForeignLoadJxlBuffer", ImageType::JXL }, { "VipsForeignLoadRadFile", ImageType::RAD }, { "VipsForeignLoadRadBuffer", ImageType::RAD }, + { "VipsForeignLoadDcRawFile", ImageType::DCRAW }, + { "VipsForeignLoadDcRawBuffer", ImageType::DCRAW }, { "VipsForeignLoadVips", ImageType::VIPS }, { "VipsForeignLoadVipsFile", ImageType::VIPS }, { "VipsForeignLoadRaw", ImageType::RAW } diff --git a/src/common.h b/src/common.h index 40048aa2..7baf37e3 100644 --- a/src/common.h +++ b/src/common.h @@ -169,6 +169,7 @@ namespace sharp { EXR, JXL, RAD, + DCRAW, VIPS, RAW, UNKNOWN, diff --git a/src/utilities.cc b/src/utilities.cc index 93bd50cd..1f78cdd8 100644 --- a/src/utilities.cc +++ b/src/utilities.cc @@ -119,7 +119,7 @@ Napi::Value format(const Napi::CallbackInfo& info) { Napi::Object format = Napi::Object::New(env); for (std::string const f : { "jpeg", "png", "webp", "tiff", "magick", "openslide", "dz", - "ppm", "fits", "gif", "svg", "heif", "pdf", "vips", "jp2k", "jxl", "rad" + "ppm", "fits", "gif", "svg", "heif", "pdf", "vips", "jp2k", "jxl", "rad", "dcraw" }) { // Input const VipsObjectClass *oc = vips_class_find("VipsOperation", (f + "load").c_str());