nodejs实现批量裁剪图片功能
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实现批量裁剪图片功能相关推荐
- qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库
我们要处理图片时,无论是在电脑还是手机上,往往都需要下载软件,但如果你只是临时用一下的话,下载软件难免显得工程有点浩大.下面就推荐几个图片处理网站,打开网页就能用. 1.图片处理 funny.pho. ...
- 按 特定区域/指定位置 批量裁剪图片
除Photoshop以外,发现一款个人觉得比Photoshop更好用的批量裁剪图片的工具,尤其是针对想指定固定位置和区域的需求来说 使用IRFANVIEW批量裁剪 很好用. IRFANVIEW支持的功 ...
- 自动批量裁剪图片的工具有哪些?这些软件你值得拥有
小伙伴平时在处理图片的时候,发现只需要应用图片的某个区域,你们会怎么做呢?试想一下,如果将图片不需要的部分打码,可能会影响图片整体的美观.我的建议是,将图片需要的部分裁剪出来,这样也可以得到图片的 ...
- php批量裁剪图片,怎么批量裁剪图片 按照一定的比例快速裁剪多张照片的方法,自定义裁剪图片大小...
在日常工作学习或休闲娱乐中,都会遇到要处理图片的时候,比方说对拍摄的照片进行裁剪操作,将拍摄进去的不需要的部分裁剪掉.对于一两张或几张图片裁剪的话逐个操作也不会太耗时,然而如果有一系列的十几张甚至几十 ...
- python批量裁剪图片_python批量裁剪图片
"""用Pythonp批量裁剪图片""" from PIL import Image import matplotlib.pyplot as ...
- 用Python批量裁剪图片
这篇博文主要介绍如何批量裁剪图片,直接上代码,注释已经讲得很清楚了. # coding: utf-8 from PIL import Image import os import os.path im ...
- 根据LabelImg标注的方框大小批量裁剪图片
根据LabelImg标注的方框大小批量裁剪图片 用LabelImg软件在windows下标注了图片了后,可以根据标注的大小进行图片的裁剪,下图是LabelImg软件图 代码 代码可实现对图片批量裁剪处 ...
- 【windows】批量裁剪图片V1.0
一.需求: 批量将文件夹中所有的图片裁剪为统一像素的图片 二.使用教程与说明: 1.提交批量图片所在的文件夹 2.填写裁减后图片的宽与高像素 3.选择保存文件的文件夹 4.点击提交按钮,等待结束 注意 ...
- nodejs批量裁剪图片尺寸大小
使用 $ node resetImage.js 依赖第三方库 $ npm install --save-dev sharp dotenv 代码 .env # 图片存放的文件夹位置 AVATAR_PAT ...
最新文章
- 【Android 应用开发】Android开发 使用 adb logcat 显示 Android 日志
- linux中怎么安装ypak软件包,Linux 124课程 13、安装和升级软件包
- BOOST_PP_CHECK_EMPTY宏相关的测试程序
- win10安装tensorflow (cpu版)
- sso登陆劫持漏洞(单点登录劫持,低危)
- Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ
- 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
- 20191205每日一句
- WindowsEclipseQt2010.02编译错误的处理
- BNS100数码人像采集系统产品说明书
- H265 Vs VP9
- C/C++编程:#pragma once用法总结
- cs224w(图机器学习)2021冬季课程学习笔记15 Frequent Subgraph Mining with GNNs
- lightoj1278
- 汽车驾驶学习-驾驶技巧:图解如何安全停车的技巧
- Lua:01---Lua语言介绍、运行Lua程序(lua解释器)
- 纯C语言实现图片与动画
- 地图渲染——四色定理的实现(AO+C++)
- 使用order by 按照指定顺序排序或自定义顺序排序
- EXCEL的几个取整函数对比,int() round() ceiling() ceiling.math()等
热门文章
- APN:使用AT+CGDCONT命令设置modem默认APN
- 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
- 张飞老师硬件第二十五部--马达驱动--原理图设计②----1马达电流/PWM载波续流/开关损耗等
- from...import、import......as与from…import* 的含义与区别
- sqlite3用法详解草稿
- 讲清楚什么是线搜索line search
- python教程西安中服_厉害了!打工人用Python分析西安市职位信息
- 三菱PLC通过RS485串口连接维特智能Modbus协议角度姿态传感器(1)——环境搭建
- Solo博客静态部署到码云gitee —— 全网最详细系列
- IIS配置SSL证书实现https