From 8f5a1223a2a84d104c5a0eb672310fb3aff3fc1c Mon Sep 17 00:00:00 2001 From: y-kurami Date: Tue, 18 Jul 2017 15:32:04 +0900 Subject: [PATCH] [#1] add tiff support --- README.md | 1 + lib/decode-tiff.js | 14 ++++++++++++++ lib/index.js | 2 ++ package.json | 1 + test/decode-tiff.test.js | 11 +++++++++++ test/images/actual.tiff | Bin 0 -> 51342 bytes test/images/expected.tiff | Bin 0 -> 51342 bytes test/index.test.js | 11 +++++++++++ yarn.lock | 4 ++++ 9 files changed, 44 insertions(+) create mode 100644 lib/decode-tiff.js create mode 100644 test/decode-tiff.test.js create mode 100644 test/images/actual.tiff create mode 100644 test/images/expected.tiff diff --git a/README.md b/README.md index 951f3c9f..e0e4c65f 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ The following codecs are available for input image files. - [x] png - [x] jpeg +- [x] tiff (limited. See https://github.com/Quramy/decode-tiff#compatibility ) - [ ] bmp `imgDiff` detects the input image format from it's extension name. For example, if the input file name ends with ".jpeg", `imgDiff` attempts to decode in JPEG way regardless of the actual file format. diff --git a/lib/decode-tiff.js b/lib/decode-tiff.js new file mode 100644 index 00000000..e2fc0ce0 --- /dev/null +++ b/lib/decode-tiff.js @@ -0,0 +1,14 @@ +const fs = require("fs"); +const { decode } = require("decode-tiff"); + +function decodeTiff(filename) { + return new Promise((resolve, reject) => { + fs.readFile(filename, (err, rawBuffer) => { + if (err) return reject(err); + const tiffData = decode(rawBuffer); + resolve(tiffData); + }); + }); +} + +module.exports = decodeTiff; diff --git a/lib/index.js b/lib/index.js index 952c2231..7bc3e5a3 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,6 +4,7 @@ const pixelmatch = require("pixelmatch"); const { PNG } = require("pngjs"); const decodePng = require("./decode-png"); const decodeJpeg = require("./decode-jpeg"); +const decodeTiff = require("./decode-tiff"); const expand = require("./expand"); const extensionDecoderMap = { }; @@ -28,6 +29,7 @@ function decode(filename) { registerDecoder(["png"], decodePng); registerDecoder(["jpg", "jpeg"], decodeJpeg); +registerDecoder(["tiff"], decodeTiff); function compare(img1, img2, diffFilename, options) { const { dataList, width, height } = expand(img1, img2); diff --git a/package.json b/package.json index fc69a77b..c979b223 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ }, "homepage": "https://github.com/reg-viz/img-diff-js#readme", "dependencies": { + "decode-tiff": "^0.2.0", "jpeg-js": "^0.3.3", "pixelmatch": "^4.0.2", "pngjs": "^3.2.0" diff --git a/test/decode-tiff.test.js b/test/decode-tiff.test.js new file mode 100644 index 00000000..e206021d --- /dev/null +++ b/test/decode-tiff.test.js @@ -0,0 +1,11 @@ +import test from "ava"; +import path from "path"; +const decodeTiff = require("../lib/decode-tiff"); + +test("decode tiff file", async t => { + const file = path.resolve(__dirname, "images/actual.tiff"); + const jpeg = await decodeTiff(file); + t.is(typeof jpeg.width, "number"); + t.is(typeof jpeg.height, "number"); + t.is(jpeg.data.length, jpeg.width * jpeg.height * 4); +}); diff --git a/test/images/actual.tiff b/test/images/actual.tiff new file mode 100644 index 0000000000000000000000000000000000000000..2dd306809e60a0b5320954216c2d148707a77786 GIT binary patch literal 51342 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 literal 0 HcmV?d00001 diff --git a/test/index.test.js b/test/index.test.js index 6e43636d..9091a7cc 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -40,6 +40,17 @@ test("compare with 2 files whose dimension are different", async t => { t.truthy(fs.statSync(path.resolve(__dirname, "images/diff_generated.wide.png"))); }); +test("compare with 2 jpeg files", async t => { + const diffFilename = path.resolve(__dirname, "images/diff_generated.tiff.png"); + rimraf.sync(diffFilename); + const { width, height } = await imgDiff({ + diffFilename, + actualFilename: path.resolve(__dirname, "images/actual.tiff"), + expectedFilename: path.resolve(__dirname, "images/expected.tiff"), + }); + t.truthy(fs.statSync(path.resolve(__dirname, "images/diff_generated.tiff.png"))); +}); + test("compare with 2 jpeg files", async t => { const diffFilename = path.resolve(__dirname, "images/diff_generated.jpg.png"); rimraf.sync(diffFilename); diff --git a/yarn.lock b/yarn.lock index c5d54013..beb28eec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -969,6 +969,10 @@ decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-tiff@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-tiff/-/decode-tiff-0.2.0.tgz#540b2949efedee689e3e20224cc04af6b82ad88a" + deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"