79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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 };
 | 
