|
@@ -1,142 +1,142 @@
|
|
-import { exec } from "node:child_process";
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-// declare possible conversions
|
|
|
|
-export const properties = {
|
|
|
|
- from: {
|
|
|
|
- images: [
|
|
|
|
- "avif",
|
|
|
|
- "bif",
|
|
|
|
- "csv",
|
|
|
|
- "exr",
|
|
|
|
- "fits",
|
|
|
|
- "gif",
|
|
|
|
- "hdr.gz",
|
|
|
|
- "hdr",
|
|
|
|
- "heic",
|
|
|
|
- "heif",
|
|
|
|
- "img.gz",
|
|
|
|
- "img",
|
|
|
|
- "j2c",
|
|
|
|
- "j2k",
|
|
|
|
- "jp2",
|
|
|
|
- "jpeg",
|
|
|
|
- "jpx",
|
|
|
|
- "jxl",
|
|
|
|
- "mat",
|
|
|
|
- "mrxs",
|
|
|
|
- "ndpi",
|
|
|
|
- "nia.gz",
|
|
|
|
- "nia",
|
|
|
|
- "nii.gz",
|
|
|
|
- "nii",
|
|
|
|
- "pdf",
|
|
|
|
- "pfm",
|
|
|
|
- "pgm",
|
|
|
|
- "pic",
|
|
|
|
- "png",
|
|
|
|
- "ppm",
|
|
|
|
- "raw",
|
|
|
|
- "scn",
|
|
|
|
- "svg",
|
|
|
|
- "svs",
|
|
|
|
- "svslide",
|
|
|
|
- "szi",
|
|
|
|
- "tif",
|
|
|
|
- "tiff",
|
|
|
|
- "v",
|
|
|
|
- "vips",
|
|
|
|
- "vms",
|
|
|
|
- "vmu",
|
|
|
|
- "webp",
|
|
|
|
- "zip",
|
|
|
|
- ],
|
|
|
|
- },
|
|
|
|
- to: {
|
|
|
|
- images: [
|
|
|
|
- "avif",
|
|
|
|
- "dzi",
|
|
|
|
- "fits",
|
|
|
|
- "gif",
|
|
|
|
- "hdr.gz",
|
|
|
|
- "heic",
|
|
|
|
- "heif",
|
|
|
|
- "img.gz",
|
|
|
|
- "j2c",
|
|
|
|
- "j2k",
|
|
|
|
- "jp2",
|
|
|
|
- "jpeg",
|
|
|
|
- "jpx",
|
|
|
|
- "jxl",
|
|
|
|
- "mat",
|
|
|
|
- "nia.gz",
|
|
|
|
- "nia",
|
|
|
|
- "nii.gz",
|
|
|
|
- "nii",
|
|
|
|
- "png",
|
|
|
|
- "tiff",
|
|
|
|
- "vips",
|
|
|
|
- "webp",
|
|
|
|
- ],
|
|
|
|
- },
|
|
|
|
- options: {
|
|
|
|
- svg: {
|
|
|
|
- scale: {
|
|
|
|
- description: "Scale the image up or down",
|
|
|
|
- type: "number",
|
|
|
|
- default: 1,
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-export function convert(
|
|
|
|
- filePath: string,
|
|
|
|
- fileType: string,
|
|
|
|
- convertTo: string,
|
|
|
|
- targetPath: string,
|
|
|
|
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
|
|
- options?: unknown,
|
|
|
|
-): Promise<string> {
|
|
|
|
- // if (fileType === "svg") {
|
|
|
|
- // const scale = options.scale || 1;
|
|
|
|
- // const metadata = await sharp(filePath).metadata();
|
|
|
|
-
|
|
|
|
- // if (!metadata || !metadata.width || !metadata.height) {
|
|
|
|
- // throw new Error("Could not get metadata from image");
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
- // const newWidth = Math.round(metadata.width * scale);
|
|
|
|
- // const newHeight = Math.round(metadata.height * scale);
|
|
|
|
-
|
|
|
|
- // return await sharp(filePath)
|
|
|
|
- // .resize(newWidth, newHeight)
|
|
|
|
- // .toFormat(convertTo)
|
|
|
|
- // .toFile(targetPath);
|
|
|
|
- // }
|
|
|
|
- let action = "copy";
|
|
|
|
- if (fileType === "pdf") {
|
|
|
|
- action = "pdfload";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
|
- exec(
|
|
|
|
- `vips ${action} "${filePath}" "${targetPath}"`,
|
|
|
|
- (error, stdout, stderr) => {
|
|
|
|
- if (error) {
|
|
|
|
- reject(`error: ${error}`);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (stdout) {
|
|
|
|
- console.log(`stdout: ${stdout}`);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (stderr) {
|
|
|
|
- console.error(`stderr: ${stderr}`);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- resolve("Done");
|
|
|
|
- },
|
|
|
|
- );
|
|
|
|
- });
|
|
|
|
-}
|
|
|
|
|
|
+import { execFile } from "node:child_process";
|
|
|
|
+
|
|
|
|
+// declare possible conversions
|
|
|
|
+export const properties = {
|
|
|
|
+ from: {
|
|
|
|
+ images: [
|
|
|
|
+ "avif",
|
|
|
|
+ "bif",
|
|
|
|
+ "csv",
|
|
|
|
+ "exr",
|
|
|
|
+ "fits",
|
|
|
|
+ "gif",
|
|
|
|
+ "hdr.gz",
|
|
|
|
+ "hdr",
|
|
|
|
+ "heic",
|
|
|
|
+ "heif",
|
|
|
|
+ "img.gz",
|
|
|
|
+ "img",
|
|
|
|
+ "j2c",
|
|
|
|
+ "j2k",
|
|
|
|
+ "jp2",
|
|
|
|
+ "jpeg",
|
|
|
|
+ "jpx",
|
|
|
|
+ "jxl",
|
|
|
|
+ "mat",
|
|
|
|
+ "mrxs",
|
|
|
|
+ "ndpi",
|
|
|
|
+ "nia.gz",
|
|
|
|
+ "nia",
|
|
|
|
+ "nii.gz",
|
|
|
|
+ "nii",
|
|
|
|
+ "pdf",
|
|
|
|
+ "pfm",
|
|
|
|
+ "pgm",
|
|
|
|
+ "pic",
|
|
|
|
+ "png",
|
|
|
|
+ "ppm",
|
|
|
|
+ "raw",
|
|
|
|
+ "scn",
|
|
|
|
+ "svg",
|
|
|
|
+ "svs",
|
|
|
|
+ "svslide",
|
|
|
|
+ "szi",
|
|
|
|
+ "tif",
|
|
|
|
+ "tiff",
|
|
|
|
+ "v",
|
|
|
|
+ "vips",
|
|
|
|
+ "vms",
|
|
|
|
+ "vmu",
|
|
|
|
+ "webp",
|
|
|
|
+ "zip",
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ to: {
|
|
|
|
+ images: [
|
|
|
|
+ "avif",
|
|
|
|
+ "dzi",
|
|
|
|
+ "fits",
|
|
|
|
+ "gif",
|
|
|
|
+ "hdr.gz",
|
|
|
|
+ "heic",
|
|
|
|
+ "heif",
|
|
|
|
+ "img.gz",
|
|
|
|
+ "j2c",
|
|
|
|
+ "j2k",
|
|
|
|
+ "jp2",
|
|
|
|
+ "jpeg",
|
|
|
|
+ "jpx",
|
|
|
|
+ "jxl",
|
|
|
|
+ "mat",
|
|
|
|
+ "nia.gz",
|
|
|
|
+ "nia",
|
|
|
|
+ "nii.gz",
|
|
|
|
+ "nii",
|
|
|
|
+ "png",
|
|
|
|
+ "tiff",
|
|
|
|
+ "vips",
|
|
|
|
+ "webp",
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ options: {
|
|
|
|
+ svg: {
|
|
|
|
+ scale: {
|
|
|
|
+ description: "Scale the image up or down",
|
|
|
|
+ type: "number",
|
|
|
|
+ default: 1,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+export function convert(
|
|
|
|
+ filePath: string,
|
|
|
|
+ fileType: string,
|
|
|
|
+ convertTo: string,
|
|
|
|
+ targetPath: string,
|
|
|
|
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
|
|
+ options?: unknown,
|
|
|
|
+): Promise<string> {
|
|
|
|
+ // if (fileType === "svg") {
|
|
|
|
+ // const scale = options.scale || 1;
|
|
|
|
+ // const metadata = await sharp(filePath).metadata();
|
|
|
|
+
|
|
|
|
+ // if (!metadata || !metadata.width || !metadata.height) {
|
|
|
|
+ // throw new Error("Could not get metadata from image");
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // const newWidth = Math.round(metadata.width * scale);
|
|
|
|
+ // const newHeight = Math.round(metadata.height * scale);
|
|
|
|
+
|
|
|
|
+ // return await sharp(filePath)
|
|
|
|
+ // .resize(newWidth, newHeight)
|
|
|
|
+ // .toFormat(convertTo)
|
|
|
|
+ // .toFile(targetPath);
|
|
|
|
+ // }
|
|
|
|
+ let action = "copy";
|
|
|
|
+ if (fileType === "pdf") {
|
|
|
|
+ action = "pdfload";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ execFile(
|
|
|
|
+ "vips",
|
|
|
|
+ [action, filePath, targetPath],
|
|
|
|
+ (error, stdout, stderr) => {
|
|
|
|
+ if (error) {
|
|
|
|
+ reject(`error: ${error}`);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (stdout) {
|
|
|
|
+ console.log(`stdout: ${stdout}`);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (stderr) {
|
|
|
|
+ console.error(`stderr: ${stderr}`);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ resolve("Done");
|
|
|
|
+ },
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+}
|