diff options
Diffstat (limited to 'client/simple/tools/img.js')
| -rw-r--r-- | client/simple/tools/img.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/client/simple/tools/img.js b/client/simple/tools/img.js new file mode 100644 index 000000000..8f815970a --- /dev/null +++ b/client/simple/tools/img.js @@ -0,0 +1,78 @@ +import fs from "fs"; +import path from "path"; +import sharp from "sharp"; +import { optimize as svgo } from "svgo"; + +/** + * @typedef {object} Src2Dest - Mapping of src to dest + * @property {string} src - Name of the source file. + * @property {string} dest - Name of the destination file. + */ + + +/** + * Convert a list of SVG files to PNG. + * + * @param {Src2Dest[]} items - Array of SVG files (src: SVG, dest:PNG) to convert. + */ + +async function svg2png (items) { + items.forEach( + async (item) => { + try { + fs.mkdir(path.dirname(item.dest), { recursive: true }, (err) => { + if (err) + throw err; + }); + + const info = await sharp(item.src).png({ + force: true, + compressionLevel: 9, + palette: true, + }).toFile(item.dest); + + console.log( + `[svg2png] created ${item.dest} -- bytes: ${info.size}, w:${info.width}px, h:${info.height}px` + ); + } catch (err) { + console.error(`ERROR: ${item.dest} -- ${err}`); + throw(err); + } + } + ); +} + + +/** + * Optimize SVG images for WEB. + * + * @param {import('svgo').Config} svgo_opts - Options passed to svgo. + * @param {Src2Dest[]} items - Array of SVG files (src:SVG, dest:SVG) to optimize. + */ + +async function svg2svg(svgo_opts, items) { + items.forEach( + async (item) => { + try { + fs.mkdir(path.dirname(item.dest), { recursive: true }, (err) => { + if (err) + throw err; + }); + + const raw = fs.readFileSync(item.src, "utf8"); + const opt = svgo(raw, svgo_opts); + fs.writeFileSync(item.dest, opt.data); + console.log( + `[svg2svg] optimized: ${item.dest} -- src: ${item.src}` + ); + + } catch (err) { + console.error(`ERROR: optimize src: ${item.src} -- ${err}`); + throw(err); + } + } + ); +} + + +export { svg2png, svg2svg }; |