From 3e93631693d6e01528b66a347f5a78945f0c4638 Mon Sep 17 00:00:00 2001 From: Jin IGARASHI Date: Tue, 29 Dec 2020 21:22:08 +0900 Subject: [PATCH] converted @cwasm/webp to typescript --- .eslintrc.js | 1 + package-lock.json | 44 +++++++++++++++++++------ package.json | 8 +++-- src/terrainrgb.ts | 4 +-- src/webp.ts | 80 ++++++++++++++++++++++++++++++++++++++++++++++ src/webp.wasm | Bin 0 -> 95255 bytes 6 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 src/webp.ts create mode 100644 src/webp.wasm diff --git a/.eslintrc.js b/.eslintrc.js index cd41668..4f1a056 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,5 +20,6 @@ module.exports = { 'plugin:@typescript-eslint/recommended-requiring-type-checking', ], rules: { + "@typescript-eslint/ban-ts-comment": "off" }, }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8de9fcc..6adea17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@watergis/terrain-rgb", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -417,14 +417,6 @@ "minimist": "^1.2.0" } }, - "@cwasm/webp": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@cwasm/webp/-/webp-0.1.5.tgz", - "integrity": "sha512-ceIZQkyxK+s7mmItNcWqqHdOBiJAxYxTnrnPNgUNjldB1M9j+Bp/3eVIVwC8rUFyN/zoFwuT0331pyY3ackaNA==", - "requires": { - "@canvas/image-data": "^1.0.0" - } - }, "@eslint/eslintrc": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", @@ -2354,6 +2346,11 @@ "map-cache": "^0.2.2" } }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4073,6 +4070,15 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4165,6 +4171,11 @@ "react-is": "^17.0.1" } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -5406,6 +5417,21 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", diff --git a/package.json b/package.json index dd2009b..7d3e7cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@watergis/terrain-rgb", - "version": "1.1.0", + "version": "1.1.1", "description": "This module is to get elevation from terrain RGB tilesets by longitude and latitude.", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -44,8 +44,10 @@ "typescript": "^3.9.6" }, "dependencies": { - "@cwasm/webp": "^0.1.5", + "@canvas/image-data": "^1.0.0", "axios": "^0.21.0", + "fs": "0.0.1-security", + "path": "^0.12.7", "png-ts": "0.0.3" }, "jest": { @@ -58,7 +60,7 @@ }, "globals": { "ts-jest": { - "tsConfig": "tsconfig.json" + "tsconfig": "tsconfig.json" } }, "testMatch": [ diff --git a/src/terrainrgb.ts b/src/terrainrgb.ts index 3ae842d..0be8916 100644 --- a/src/terrainrgb.ts +++ b/src/terrainrgb.ts @@ -1,7 +1,7 @@ import * as tilebelt from './tilebelt'; import axios from 'axios'; import PNG from 'png-ts'; -import webp from '@cwasm/webp'; +import { decode } from './webp'; class TerrainRGB { @@ -85,7 +85,7 @@ class TerrainRGB { } getElevationFromWEBP(binary: Uint8Array, tile: number[], lng: number, lat: number, tileSize: number): number{ - const image = webp.decode(binary); + const image = decode(binary); const pixels = image.data; const data = []; diff --git a/src/webp.ts b/src/webp.ts new file mode 100644 index 0000000..8017e63 --- /dev/null +++ b/src/webp.ts @@ -0,0 +1,80 @@ +/* global WebAssembly */ + +/** + * This module was inpired from the below repository. + * https://github.com/LinusU/cwasm-webp + * I converted the module to typescript. + * Thanks a lot! + */ + +import fs from 'fs' +import path from 'path' + +import ImageData from '@canvas/image-data' + +const stubs = { + fd_close () { throw new Error('Syscall fd_close not implemented') }, + fd_seek () { throw new Error('Syscall fd_seek not implemented') }, + fd_write () { throw new Error('Syscall fd_write not implemented') } +} + +const code = fs.readFileSync(path.join(__dirname, 'webp.wasm')) +const wasmModule = new WebAssembly.Module(code) +const instance = new WebAssembly.Instance(wasmModule, { wasi_snapshot_preview1: stubs }) + +export const decode = (input: Uint8Array): ImageData => { + // Allocate memory to hand over the input data to WASM + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const inputPointer = instance.exports.malloc(input.byteLength) + // @ts-ignore + const targetView = new Uint8Array(instance.exports.memory.buffer, inputPointer, input.byteLength) + + // Copy input data into WASM readable memory + targetView.set(input) + + // Allocate metadata (width & height) + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const metadataPointer : number = instance.exports.malloc(8) + + // Decode input data + // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const outputPointer = instance.exports.WebPDecodeRGBA(inputPointer, input.byteLength, metadataPointer, metadataPointer + 4) + + // Free the input data in WASM land + // @ts-ignore + instance.exports.free(inputPointer) + + // Guard return value for NULL pointer + if (outputPointer === 0) { + // @ts-ignore + instance.exports.free(metadataPointer) + throw new Error('Failed to decode WebP image') + } + + // Read returned metadata + // @ts-ignore + const metadata = new Uint32Array(instance.exports.memory.buffer, metadataPointer, 2) + const [width, height] = metadata + + // Free the metadata in WASM land + // @ts-ignore + instance.exports.free(metadataPointer) + + // Create an empty buffer for the resulting data + const outputSize = (width * height * 4) + const output = new Uint8ClampedArray(outputSize) + + // Copy decoded data from WASM memory to JS + // @ts-ignore + output.set(new Uint8Array(instance.exports.memory.buffer, outputPointer, outputSize)) + + // Free WASM copy of decoded data + // @ts-ignore + instance.exports.free(outputPointer) + + // Return decoded image as raw data + return new ImageData(output, width, height) +} \ No newline at end of file diff --git a/src/webp.wasm b/src/webp.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8ec151bc56e629cdf53bfe2009d14b9c5ca770b3 GIT binary patch literal 95255 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 pUW(8^Et^