build-windows-icon.cjs 996 B

123456789101112131415161718
  1. const { app, nativeImage } = require('electron')
  2. const { readFileSync, writeFileSync } = require('node:fs')
  3. app.whenReady().then(() => {
  4. const source = nativeImage.createFromBuffer(readFileSync(process.argv[2]))
  5. if (source.isEmpty()) throw new Error('应用图标无效')
  6. const sizes = [16, 32, 48, 256], images = sizes.map(size => source.resize({ width: size, height: size }).toPNG())
  7. const header = Buffer.alloc(6 + 16 * sizes.length)
  8. header.writeUInt16LE(1, 2); header.writeUInt16LE(sizes.length, 4)
  9. let offset = header.length
  10. images.forEach((bytes, index) => {
  11. const at = 6 + index * 16
  12. header[at] = header[at + 1] = sizes[index] % 256
  13. header.writeUInt16LE(1, at + 4); header.writeUInt16LE(32, at + 6)
  14. header.writeUInt32LE(bytes.length, at + 8); header.writeUInt32LE(offset, at + 12)
  15. offset += bytes.length
  16. })
  17. writeFileSync(process.argv[3], Buffer.concat([header, ...images])); app.quit()
  18. }).catch(error => { console.error(error.message); app.exit(1) })