1、初始化

首先新建一个 tailor-img 文件夹,接着执行 npm init -y 初始化一个package.json

2、安装相关插件

  • archiver 压缩文件
  • canvas 裁剪图片
  • glob 批量获取路径
    npm i archiver canvas glob --save

3、app.js

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] = optionsconst { width, height, isWidth, isHeight, scale } = configconst 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/*')// 压缩成zipconst archive = archiver('zip', {zlib: {level: 9,},})// 输出到当前文件夹下的 image-resize.zipconst 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)}` })}
})()

4、config.js用于修改宽高等配置

module.exports = {width: 300,height: '',// 根据宽度等比缩放,优先级更高isWidth: true,// 根据高度等比缩放isHeight: false,// 宽高整体缩放scale: 1,
}

nodejs实现批量裁剪图片功能相关推荐

  1. qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库

    我们要处理图片时,无论是在电脑还是手机上,往往都需要下载软件,但如果你只是临时用一下的话,下载软件难免显得工程有点浩大.下面就推荐几个图片处理网站,打开网页就能用. 1.图片处理 funny.pho. ...

  2. 按 特定区域/指定位置 批量裁剪图片

    除Photoshop以外,发现一款个人觉得比Photoshop更好用的批量裁剪图片的工具,尤其是针对想指定固定位置和区域的需求来说 使用IRFANVIEW批量裁剪 很好用. IRFANVIEW支持的功 ...

  3. 自动批量裁剪图片的工具有哪些?这些软件你值得拥有

      小伙伴平时在处理图片的时候,发现只需要应用图片的某个区域,你们会怎么做呢?试想一下,如果将图片不需要的部分打码,可能会影响图片整体的美观.我的建议是,将图片需要的部分裁剪出来,这样也可以得到图片的 ...

  4. php批量裁剪图片,怎么批量裁剪图片 按照一定的比例快速裁剪多张照片的方法,自定义裁剪图片大小...

    在日常工作学习或休闲娱乐中,都会遇到要处理图片的时候,比方说对拍摄的照片进行裁剪操作,将拍摄进去的不需要的部分裁剪掉.对于一两张或几张图片裁剪的话逐个操作也不会太耗时,然而如果有一系列的十几张甚至几十 ...

  5. python批量裁剪图片_python批量裁剪图片

    """用Pythonp批量裁剪图片""" from PIL import Image import matplotlib.pyplot as ...

  6. 用Python批量裁剪图片

    这篇博文主要介绍如何批量裁剪图片,直接上代码,注释已经讲得很清楚了. # coding: utf-8 from PIL import Image import os import os.path im ...

  7. 根据LabelImg标注的方框大小批量裁剪图片

    根据LabelImg标注的方框大小批量裁剪图片 用LabelImg软件在windows下标注了图片了后,可以根据标注的大小进行图片的裁剪,下图是LabelImg软件图 代码 代码可实现对图片批量裁剪处 ...

  8. 【windows】批量裁剪图片V1.0

    一.需求: 批量将文件夹中所有的图片裁剪为统一像素的图片 二.使用教程与说明: 1.提交批量图片所在的文件夹 2.填写裁减后图片的宽与高像素 3.选择保存文件的文件夹 4.点击提交按钮,等待结束 注意 ...

  9. nodejs批量裁剪图片尺寸大小

    使用 $ node resetImage.js 依赖第三方库 $ npm install --save-dev sharp dotenv 代码 .env # 图片存放的文件夹位置 AVATAR_PAT ...

最新文章

  1. 【Android 应用开发】Android开发 使用 adb logcat 显示 Android 日志
  2. linux中怎么安装ypak软件包,Linux 124课程 13、安装和升级软件包
  3. BOOST_PP_CHECK_EMPTY宏相关的测试程序
  4. win10安装tensorflow (cpu版)
  5. sso登陆劫持漏洞(单点登录劫持,低危)
  6. Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ
  7. 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
  8. 20191205每日一句
  9. WindowsEclipseQt2010.02编译错误的处理
  10. BNS100数码人像采集系统产品说明书
  11. H265 Vs VP9
  12. C/C++编程:#pragma once用法总结
  13. cs224w(图机器学习)2021冬季课程学习笔记15 Frequent Subgraph Mining with GNNs
  14. lightoj1278
  15. 汽车驾驶学习-驾驶技巧:图解如何安全停车的技巧
  16. Lua:01---Lua语言介绍、运行Lua程序(lua解释器)
  17. 纯C语言实现图片与动画
  18. 地图渲染——四色定理的实现(AO+C++)
  19. 使用order by 按照指定顺序排序或自定义顺序排序
  20. EXCEL的几个取整函数对比,int() round() ceiling() ceiling.math()等

热门文章

  1. APN:使用AT+CGDCONT命令设置modem默认APN
  2. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
  3. 张飞老师硬件第二十五部--马达驱动--原理图设计②----1马达电流/PWM载波续流/开关损耗等
  4. from...import、import......as与from…import* 的含义与区别
  5. sqlite3用法详解草稿
  6. 讲清楚什么是线搜索line search
  7. python教程西安中服_厉害了!打工人用Python分析西安市职位信息
  8. 三菱PLC通过RS485串口连接维特智能Modbus协议角度姿态传感器(1)——环境搭建
  9. Solo博客静态部署到码云gitee —— 全网最详细系列
  10. IIS配置SSL证书实现https