当前位置:主页 > 聚焦 >

nodejs怎么实现对图片进行批量裁剪?

时间:2020-12-09 23:55:27

  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, }

  编程视频课程!!

热点推荐
1 Pavel Durov:购买Plush PEPE NFT推动TON市场

消息,Telegram创始人Pavel Durov最近以7500 Gram购买了Plush PEPE NFT,并将其转让给与Telegram界面和礼物...

2 Polymarket黑客事件更新:损失达310万美元

消息,Polymarket平台的黑客事件更新显示,黑客从11个用户钱包中盗取的金额约为310万美元,涉...

3 赵长鹏:人工智能、全球局势及四年周期

消息,Binance创始人赵长鹏表示,过去一年加密市场下跌50%是由人工智能、全球局势及四年周期...

4 CZ:加密市场50%回调受多因素影响

消息,CZ在接受CoinDesk采访时表示,加密市场过去一年的50%回调并非由单一因素导致,而是地缘...

5 软银股价暴跌12.53%,因OpenAI考虑推迟1万亿

消息,软银集团股价在东京交易中下跌超过12%,原因是有报道称OpenAI正在考虑将其计划中的1万...

6 俄袭击了该公司在波尔塔瓦和哈尔科夫地

消息,乌克兰国家天然气公司称,俄罗斯袭击了该公司在波尔塔瓦和哈尔科夫地区的生产设施...

7 新钱包存入63万美元USDC并开设290万美元

消息,某用户创建了一个新钱包,存入约63万美元的USDC,并以10倍杠杆开设了290万美元的XRP空单...

8 未知钱包转入1349枚BTC,价值约8123万美元

消息,据Whale Alert监测,未知钱包刚刚转入1,349枚BTC,按实时价格计算约合81,232,738美元。...

9 美国国税局发布加密资产没收通知,涉及

消息,吴说获悉,美国国税局刑事调查部门于6月26日发布官方没收通知,列出多笔已扣押并拟...

10 OpenAI账号与计费系统同步故障:ChatGPT网页

消息,OpenAI账号与计费系统出现同步故障,导致ChatGPT网页端服务等级混乱与API限流加剧。部分...

成都来彰科技 蜀ICP备2025134723号-1

资讯来源互联网,如有版权问题请联系管理员删除。