Browse Source

Add "Extract EXIF" operation

toby 8 năm trước cách đây
mục cha
commit
1b8a25ec88

+ 1 - 0
package.json

@@ -68,6 +68,7 @@
     "escodegen": "^1.8.1",
     "esmangle": "^1.0.1",
     "esprima": "^3.1.3",
+    "exif-parser": "^0.1.9",
     "google-code-prettify": "^1.0.5",
     "jquery": "^3.1.1",
     "jsbn": "^1.1.0",

+ 1 - 0
src/core/config/Categories.js

@@ -207,6 +207,7 @@ const Categories = [
             "Regular expression",
             "XPath expression",
             "CSS selector",
+            "Extract EXIF",
         ]
     },
     {

+ 10 - 0
src/core/config/OperationConfig.js

@@ -15,6 +15,7 @@ import Endian from "../operations/Endian.js";
 import Entropy from "../operations/Entropy.js";
 import Extract from "../operations/Extract.js";
 import FileType from "../operations/FileType.js";
+import Image from "../operations/Image.js";
 import Hash from "../operations/Hash.js";
 import Hexdump from "../operations/Hexdump.js";
 import HTML from "../operations/HTML.js";
@@ -3249,6 +3250,15 @@ const OperationConfig = {
             },
         ]
     },
+    "Extract EXIF": {
+        description: [
+        ].join("\n"),
+        run: Image.runEXIF,
+        inputType: "byteArray",
+        outputType: "string",
+        args: [
+        ]
+    },
 };
 
 export default OperationConfig;

+ 36 - 0
src/core/operations/Image.js

@@ -0,0 +1,36 @@
+import * as ExifParser from "exif-parser";
+import Utils from "../Utils.js";
+
+
+/**
+ * Image operations.
+ *
+ * @author tlwr [toby@toby.codes]
+ * @copyright Crown Copyright 2017
+ * @license Apache-2.0
+ *
+ * @namespace
+ */
+const Image = {
+    runEXIF(input, args) {
+        try {
+            let bytes = Uint8Array.from(input);
+            let parser = ExifParser.create(bytes.buffer);
+            let result = parser.parse();
+
+            let lines = [];
+            for (let tagName in result.tags) {
+                let value = result.tags[tagName];
+                lines.push(`${tagName}: ${value}`);
+            }
+
+            let numTags = lines.length;
+            lines.unshift(`Found ${numTags} tags.\n`);
+            return lines.join("\n");
+        } catch (err) {
+            throw "Could not EXIF data from image: " + err;
+        }
+    },
+};
+
+export default Image;

+ 1 - 0
test/index.js

@@ -15,6 +15,7 @@ import "./tests/operations/Base58.js";
 import "./tests/operations/ByteRepr.js";
 import "./tests/operations/Compress.js";
 import "./tests/operations/FlowControl.js";
+import "./tests/operations/Image.js";
 import "./tests/operations/MorseCode.js";
 import "./tests/operations/StrUtils.js";
 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 43 - 0
test/tests/operations/Image.js


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác