gpt4 book ai didi

javascript - NodeJS : How to zip (local) files after done with JIMP

转载 作者:行者123 更新时间:2023-12-03 00:30:54 25 4
gpt4 key购买 nike

我正在尝试使用 NodeJS 在我的计算机上自动执行一些琐碎的程序。现在我可以将一些 png 文件转换为 jpg。我想将它们全部捆绑在一个 zip 中。

const fs = require('fs')
const path = require('path')
const jimp = require('jimp')

const files = fs.readdirSync('./')

// Convert all png to jpg
const pngs = files.filter(file => path.extname(file).toLowerCase() === '.png')

let jpgs = []

Promise.all(pngs.map(png => jimp.read('./' + png))).then(jimps => {
jimps.map((img, i) => {
img
.rgba(false)
.background(0xffffffff)
.write(`./jpgs/${path.basename(pngs[i], '.png')}.jpg`)
})
console.log('Done converting')
})

// Zip all the .png and .jpg files into PNGs.zip and JPGs.zip
// TODO:

我尝试了一下 JSZip,但无法使其工作。

解决方案

const fs = require('fs')
const path = require('path')
const jimp = require('jimp')
const CLIProgress = require('cli-progress')

const zipPNG = new require('node-zip')()
const zipJPG = new require('node-zip')()

const files = fs.readdirSync('./')

// Convert all png to jpg
const pngs = files.filter(file => path.extname(file).toLowerCase() === '.png')
let jpgs = []

Promise.all(pngs.map(png => jimp.read('./' + png))).then(jimps => {
const bar = new CLIProgress.Bar({}, CLIProgress.Presets.shades_classic)
bar.start(pngs.length, 0)

jimps.map((img, i) => {
img
.rgba(false)
.background(0xffffffff)
.write(`./jpgs/${path.basename(pngs[i], '.png')}.jpg`)

bar.update(i + 1)
})
bar.stop()
console.log('Done converting')

// Pack the files nicely in ZIP
pngs.forEach(png => {
zipPNG.file(png, fs.readFileSync(path.join('./', png)))
zipJPG.file(
`${path.basename(png, '.png')}.jpg`,
fs.readFileSync(`./jpgs/${path.basename(png, '.png')}.jpg`)
)
})

let data = zipPNG.generate({ base64: false, compression: 'DEFLATE' })
fs.writeFileSync('PNG.zip', data, 'binary')
console.log('PNGs zipped')

data = zipJPG.generate({ base64: false, compression: 'DEFLATE' })
fs.writeFileSync('./jpgs/JPG.zip', data, 'binary')
console.log('JPGs zipped')
})

最佳答案

我会使用 npm 包 node-zip 。这是一个非常简单的库,具有易于使用的界面。

关于javascript - NodeJS : How to zip (local) files after done with JIMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53874725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com