Use pcb-stackup to generate svg data from gerber files and then use sharp to generate a png file from the svg buffer
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
const fs = require('fs');
|
|
const pcbStackup = require('pcb-stackup');
|
|
const sharp = require('sharp');
|
|
|
|
// Configuration
|
|
const resizeWidth = 600;
|
|
const density = 1000;
|
|
const compLevel = 1;
|
|
const destfile = './gerber/pcb3.png';
|
|
|
|
async function writeSVG(filepath, data) {
|
|
try {
|
|
await fs.promises.writeFile(filepath, data, { flag: 'w' });
|
|
} catch (e) {
|
|
console.error(`Error writing file: ${e.message}`);
|
|
}
|
|
}
|
|
|
|
const fileNames = [
|
|
'./gerber/default/copper_top.gbr',
|
|
'./gerber/default/drill_1_16.xln',
|
|
'./gerber/default/silkscreen_top.gbr',
|
|
'./gerber/default/soldermask_top.gbr',
|
|
'./gerber/default/solderpaste_top.gbr',
|
|
'./gerber/default/profile.gbr',
|
|
]
|
|
|
|
const layers = fileNames.map(filename => ({
|
|
filename,
|
|
gerber: fs.createReadStream(filename),
|
|
}));
|
|
|
|
pcbStackup(layers).then(stackup => {
|
|
// Create buffer from SVG string
|
|
sharp(Buffer.from(stackup.top.svg), { density: density })
|
|
.resize({ width: resizeWidth })
|
|
.png({
|
|
compressionLevel: compLevel })
|
|
.toFile(destfile)
|
|
.then((info) => {
|
|
console.log(info)
|
|
})
|
|
.catch((e) => {
|
|
console.error(e);
|
|
})
|
|
})
|
|
.catch((e) => {
|
|
console.error(e);
|
|
});
|