Add remove EXIF operation

This commit is contained in:
David Moodie 2017-06-04 17:08:39 +01:00
parent 57dcd961d5
commit 6741ba0783
5 changed files with 90 additions and 0 deletions

View file

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

View file

@ -3388,6 +3388,19 @@ const OperationConfig = {
}
]
},
"Remove EXIF": {
description: [
"Removes EXIF data from an image.",
"<br><br>",
"EXIF data is metadata embedded in images (JPEG, JPG, TIFF) and audio files.",
"<br><br>",
"EXIF data from photos usually contains information about the image file itself as well as the device used to create it.",
].join("\n"),
run: Image.removeEXIF,
inputType: "byteArray",
outputType: "byteArray",
args: [],
},
};
export default OperationConfig;

View file

@ -1,4 +1,5 @@
import * as ExifParser from "exif-parser";
import * as Piexifjs from "piexifjs";
import Utils from "../Utils.js";
import FileType from "./FileType.js";
@ -43,6 +44,31 @@ const Image = {
}
},
/**
* Remove EXIF operation.
*
* Removes EXIF data from a byteArray, representing a JPG.
*
* @author David Moodie [davidmoodie12@gmail.com]
* @param {byteArray} input
* @param {Object[]} args
* @returns {string}
*/
removeEXIF(input, args) {
try {
// Piexifjs seems to work best with base64 input
const base64 = "data:image/jpeg;base64," + Utils.toBase64(input);
const newImageB64 = Piexifjs.remove(base64);
// Convert the base64 back to byteArray
const newImage = Utils.fromBase64(newImageB64.split(",")[1], null, "byteArray");
return newImage;
} catch (err) {
// Simply return input if no EXIF data is found
if (err == "Exif not found.") return input;
throw "Could not remove EXIF data from image: " + err;
}
},
/**
* @constant