nodejs怎么实现对图片进行批量裁剪?下面本篇文章给大家介绍一下nodejs实现批量裁剪图片功能的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

相关推荐:《nodejs 教程》
首先新建一个 tailor-img 文件夹,接着执行 npm init -y 初始化一个package.json
npm i archiver canvas glob --save
const fs = require('fs')
const { basename } = require('path')
// 压缩文件
const archiver = require('archiver')
// canvas库,用于裁剪图片
const { createCanvas, loadImage } = require('canvas')
// 批量获取路径
const glob = require('glob')
const config = require('./config')
// 根据宽高获取配置
function getOptions(options, config) {
const [sourceWidth, sourceHeight] = options
const { width, height, isWidth, isHeight, scale } = config
const haveWidth = [width, (sourceHeight * width * scale) / sourceWidth]
const haveHeight = [(sourceWidth * height * scale) / sourceHeight, height]
if (width === 0 || height === 0) {
return [0, 0]
}
if (width && height) {
if (isWidth) {
return haveWidth
}
if (isHeight) {
return haveHeight
}
return [width / scale, height / scale]
}
if (width && !height) {
return haveWidth
}
if (height && !width) {
return haveHeight
}
return options.map((item) => item / scale)
}
!(async () => {
const paths = glob.sync('./images/*')
// 压缩成zip
const archive = archiver('zip', {
zlib: {
level: 9,
},
})
// 输出到当前文件夹下的 image-resize.zip
const output = fs.createWriteStream(__dirname + '/image-resize.zip')
archive.pipe(output)
for (let i = 0; i < paths.length; i++) {
const path = paths[i]
const image = await loadImage(path)
const { width, height } = image
// 由于使用了扩展运算符展开对象,这里需要为对象定义迭代器
const obj = { width, height }
obj[Symbol.iterator] = function () {
return {
next: function () {
let objArr = Reflect.ownKeys(obj)
if (this.index < objArr.length - 1) {
let key = objArr[this.index]
this.index++
return { value: obj[key] }
} else {
return { done: true }
}
},
index: 0,
}
}
// 默认缩放2倍
// const options = [width, height].map((item) => item / 2)
const options = getOptions(obj, config)
const canvas = createCanvas(...options)
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0, ...options)
archive.append(canvas.toBuffer(), { name: `${basename(path)}` })
}
})()module.exports = {
width: 300,
height: '',
// 根据宽度等比缩放,优先级更高
isWidth: true,
// 根据高度等比缩放
isHeight: false,
// 宽高整体缩放
scale: 1,
}更多编程相关知识,请访问:编程视频课程!!
以上就是nodejs怎么实现对图片进行批量裁剪?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号