nodejs怎么实现对图片进行批量裁剪?下面本篇文章给大家介绍一下nodejs实现批量裁剪图片功能的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
相关:《nodejs 教程》
1、初始化
首先新建一个 tailor-img 文件夹,接着执行 npm init -y 初始化一个package.json
2、安装相关插件archiver 压缩文件canvas 裁剪图片glob 批量获取路径npm i archiver canvas glob --save3、app.jsconst 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 // 由于使用了扩展运算符展开对象,这里需要为对象定义迭代器ex < 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)}` }) } })()4、config.js用于修改宽高等配置module.exports = { width: 300, height: '', // 根据宽度等比缩放,优先级更高 isWidth: true, // 根据高度等比缩放 isHeight: false, // 宽高整体缩放 scale: 1, }
编程视频课程!!
消息,CZ 在币安广场 AMA 直播中表示:何一弄的抽奖是她想做的事情,我一般用社交媒体用的比...
2 Zcash基金会部署5个DNS种子节点,以应对消息,1 月 14 日,Zcash 基金会官方宣布,为应对 Electric Coin Company 运营的 DNS 种子节点于 1 月...
3 交易员pension消息,据 Onchain Lens 监测,pension-usdt.eth 已完全平仓 ETH 3 倍多单,获利 472 万美元。该地址累计...
4 UXLINK 将推出 AI 驱动的预测市场产品 UXP消息,Web3 社交基础设施 UXLINK 今日发布 UXPredict 战略愿景,旨在打造基于「Social + AI」的 Soci...
5 分析:2026年比特币涨幅主要集中在北美交消息,1 月 14 日,比特币短时 96,000 美元,2026 年以来累计上涨近 10%。这一上涨走势主要由北美...
6 巨鲸 5 分钟前再从 OKX 提取 2000 枚 ETH,累消息,据 @ai_9684xtpa 监测,某押注 ETH 的巨鲸地址 5 分钟前再次从 OKX 提取 2000 枚 ETH,价值约...
7 Binance Wallet集成Aster支持钱包内杠杆合约交1月14日消息,Binance Wallet与去中心化交易所Aster达成合作,推出支持BNB智能链用户直接在钱包内...
8 WSPN 携手 TradeGo 支持 JOC 实现链上贸易融资消息,ME News 消息,1 月 14 日,稳定币基础设施提供商 WSPN 宣布,已支持澳大利亚肉类与农产品...
9 比特币未平仓合约骤降31%预示市场去杠杆消息,据CryptoQuant发推称:比特币未平仓合约下降31%,发出去杠杆信号。历史数据显示,此类调...
10 Aster:“人机大战”第二季交易赛将在A消息,Aster 在 X 平台发文表示,Human VS AI第二季交易竞赛将在 Aster Chain 测试网举行。本季竞赛...
成都来彰科技 蜀ICP备2025134723号-1
资讯来源互联网,如有版权问题请联系管理员删除。