Nodejs批量处理图片小工具:批量修改图片信息

news2024/12/24 11:39:31

小工具一:批量修改文件夹里面的图片名称

步骤:

1.安装nodejs。

2.根据需要修改editFileName(filePath, formatName)函数的参数,也可以不改,直接将renameFile.js和img文件夹放在同一个目录下。

3.在renameFile.js目录下开启终端,在终端执行node renameFile.js。

此功能适合批量按递增规则、批量添加文件名称后缀等来修改图片名称。如批量修改文件夹的图片名称,以1.png,2.png...来命名。

renameFile.js:

// 导入node文件系统模块(fs)
var fs = require("fs");
// 这里path是你要读取哪一个目录下的所有文件,如'./img',此时img放在js的同一级目录
var filePath = './img';
var formatName = 'png';
editFileName(filePath, formatName); //将img里面的图片重新命名为1.png 2.png

/**
 * 
 * @param {*} path 文件夹路径 如'./img'
 * @param {*} format 
 */
function editFileName(path, format) {
    fs.readdir(path, function (err, files) {
         //files是名称数组,存的是文件夹里面所有的文件名字比如[xx.png]
        files.forEach(function (filename, index) {
            //运用正则表达式替换oldPath中不想要的部分
            var oldPath = path + '/' + filename,
                newPath = path + '/' + (index + 1 - 0) + '.' + format;
            // fs.rename(oldPath, newPath, callback) 
            fs.rename(oldPath, newPath, function (err) {
                if (!err) {
                    console.log(filename + '副本替换成功!')
                }
            })
        })
    })
}

img原文件夹里面的图片:

 renameFile.js目录下开启终端,在终端运行node renameFile.js,,img文件里面的图片:

小工具二:批量修改文件夹里面的图片尺寸

步骤:

1.安装nodejs。

2.安装sharp,执行npm install sharp。

3.将resizeFile.js和img文件夹放在同一个目录下,并在同一目录下创建outputImg文件夹(必须创建,如果不创建会报错)。

4.根据需要的尺寸,修改imageSize=[width,height],此案例里面是400*400的尺寸。

5.在resizeFile.js目录下开启终端,在终端执行node renameFile.js。

此功能适合批量修改图片的宽高尺寸。

renameFile.js:

const fs = require('fs');
const sharp = require('sharp');

const inputFolder = './img/';
const outputFolder = './outputImg/';
const imageSize = [400, 400];
fs.readdir(inputFolder, (err, files) => {
    if (err) console.log(err);
    files.forEach(file => {
        console.log(file)
        sharp(inputFolder + file)
            .resize(imageSize[0], imageSize[1])
            .toFile(outputFolder + file, (err, info) => {
                if (err) {
                    console.log(err);
                };
                console.log(info);
                 //info里面包含图片的信息
                 // {
                //     format: 'png',
                //     width: 400,
                //     height: 400,
                //     channels: 4,
                //     premultiplied: true,
                //     size: 9466
                // }
            });
    });
});

执行node renameFile.js后,outputImg文件夹里面会出现我们需要的尺寸的图片。

案例中的需求是图片尺寸都变为400*400,下图是我们需要的图片。

小工具三:批量获取文件夹里面的图片宽高,并添加到css文件中

步骤:

1.安装nodejs。

2.安装image-size,执行npm run image-size。

3.在eiitFileBySize.js目录下开启终端,在终端执行node eiitFileBySize.js。

此功能适合批量获取文件夹的图片信息,并将信息添加到新文件中。

案例中的需求是将文件夹中的图片的宽高写入到css中。

eiitFileBySize.js:

var fs = require("fs");
var sizeOf = require('image-size');
var dimensions;
var filePath = './img';

// 同步读取
var data = fs.readFileSync('./css/index.css');
data=data.toString();
fs.readdir(filePath, function (err, files) {
    files.forEach(function (fileName, index) {
        console.log(fileName)
        dimensions = sizeOf('./img/' + fileName);
        data += '\n.class'+(index+1)+'{\n  width:' + dimensions.width + 'px;\n  height:' + dimensions.height + 'px;\n}';
    })
    fs.writeFile('./css/index.css', data, function (err) {
        if (err) {
            return console.error(err);
        }
    });
})

执行前的img文件夹:

执行前的index.css:

body{
    background:#ccc;
}

执行后的index.css:

body{
    background:#ccc;
}
.class1{
  width:200px;
  height:300px;
}
.class2{
  width:300px;
  height:400px;
}
.class3{
  width:400px;
  height:500px;
}

小工具四:批量压缩图片(jpg格式)

步骤:

1.安装nodejs。

2.安装images,执行npm run images。

3.在compressFile.js目录下开启终端,在终端执行node compressFile.js。

此功能适合批量获取文件夹的图片信息,并将信息添加到新文件中。

案例中的需求是将文件夹中的图片压缩,压缩后,图片质量为60;缺点:只能压缩jpg图片。

compressFile.js:

var images = require("images")
var fs = require("fs")
var path = "./img" //原图路径
var savepath = "./imgzip" //压缩图保存路径

function explorer(path) {
    fs.readdir(path, function (err, files) { //err 为错误 , files 文件名列表包含文件夹与文件
        if (err) {
            console.log('error:\n' + err);
            return;
        }

        files.forEach(function (file) {
            fs.stat(path + '/' + file, function (err, stat) {
                if (err) {
                    console.log(err);
                    return;
                }

                if (stat.isDirectory()) {
                    explorer(path + '/' + file); // 如果是文件夹就遍历

                } else {
                    //console.log('文件名:' + path.substring(9) + '/' + file);  // 读出所有的文件					
                    var name = path + '/' + file;
                    var dirName = savepath + path.substring(9);
                    var fileName = savepath + path.substring(9) + '/' + file;
                    fs.mkdir(dirName, {
                        recursive: true
                    }, (err) => { //创建文件夹
                        if (err) {
                            console.log('X 文件夹创建失败')
                        } else {
                            console.log('文件夹创建成功')
                            console.log(name,fileName)
                            images(name).save(fileName, {
                                quality: 60
                            }); //保存图片到文件,图片质量为60	
                        }
                    })

                }
            })
        })
    })
}
explorer(path);

执行node compressFile.js前,img文件夹:

 执行node compressFile.js后,imgzip文件夹:

小工具五:批量压缩图片(jpg|png格式)

步骤:

1.安装nodejs。

2.安装imagemin和imageminJpegtran和imageminPngquant,执行

npm run imagemin@7.0.1

npm run imagemin-mozjpeg@8.0.0

npm run imagemin-pngquant@9.0.2

注意版本的兼容,我用的是上面这三个版本。

3.在compressFileAll.js目录下开启终端,在终端执行node compressFileAll.js。

此功能适合批量压缩jpg或png图片。

compressFileAll.js

const imagemin = require('imagemin');
const imageminJpegtran = require('imagemin-jpegtran');
const imageminPngquant = require('imagemin-pngquant');

(async () => {
    const files = await imagemin(['img/*.{jpg,png}'], {
        destination: './buildImages',
        plugins: [
            imageminJpegtran(),
            imageminPngquant({
                quality: [0.6, 0.8]
            })
        ]
    });

    console.log(files);
    //=> [{data: <Buffer 89 50 4e …>, destinationPath: 'build/images/foo.jpg'}, …]
})();

执行node compressFileAll.js前的img文件夹:

 执行node compressFileAll.js后的buildImages文件夹:

小工具六:批量给图片添加logo

步骤:

1.安装nodejs。

2.安装images,执行

npm run images

3.在addLogo.js目录下开启终端,在终端执行node addLogo.js。

此功能适合批量给文件夹的图片添加Logo。

addLogo.js

var fs = require("fs");
var images = require('images');
var path = require('path');
var watermarkImg = images('./logo.png');
var filePath = './img/';
var  savePath= './saveImg/'

fs.readdir(filePath, function (err, files) { //err 为错误 , files 文件名列表包含文件夹与文件
    if (err) {
        console.log('error:\n' + err);
        return;
    }

    files.forEach(function (file) {
        console.log(file)
        console.log(filePath + file)
        var sourceImg = images(filePath + file); // 源图片的文件夹
        var sWidth = sourceImg.width();
        var sHeight = sourceImg.height();
        var wmWidth = watermarkImg.width();
        var wmHeight = watermarkImg.height();
        fs.mkdir(savePath, {
            recursive: true
        }, (err) => { //创建文件夹
            if (err) {
                console.log('文件夹创建失败')
            } else {
                console.log('文件夹创建成功')
                images(sourceImg) // 设置绘制的坐标位置,右下角距离 40px
                    .draw(watermarkImg, sWidth - wmWidth - 40, sHeight - wmHeight - 40) // 保存格式会自动识别
                    .save(savePath + file);
            }
        })
    })
})

执行node addLogo.js的img文件夹:

执行node addLogo.js后的saveImg文件夹:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL报错this is incompatible with sql_mode=only_full_group_by

一、bug记录 1.1.bug截图 1.2.sql语句 SELECT id,batch_no,if_code,channel_mch_no,bill_date,bill_type,currency,order_id, channel_order_no,channel_amount,channel_fee_amount,channel_success_at, channel_user,channel_state,org_pay_order_id,channel_refund_amoun…

曾经由盛转衰的骈文,却引领后人在文质兼美的创作之路上坚定前行

又叫骈体文&#xff0c;是和散文相对应的一种文体&#xff0c;它兴起于汉末&#xff0c;形成于魏晋&#xff0c;最盛行于南北朝&#xff0c;在初唐、中唐、唐末、五代、宋初时也盛极一时。古人语&#xff1a;两马并驾为骈&#xff0c;所以骈文最大的特点是用对偶的手法&#xf…

Fiddler抓包工具之fiddler设置手机端抓包

fiddler设置手机端抓包 安卓手机抓包 第一步&#xff1a;配置电脑和安卓的相关设置 1、手机和fiddler位于同一个局域网内&#xff1b;首先从fiddler处获取到ip地址和端口号&#xff1a; &#xff0c;点击online&#xff0c;最后一行就是ip地址 2、路径&#xff1a;Tools》O…

数据库基础——10.子查询

这篇文章来讲一下数据库的子查询 目录 1. 需求分析与问题解决 1.1 实际问题 1.2 子查询的基本使用 1.3 子查询的分类 2. 单行子查询 2.1 单行比较操作符 2.2 代码示例 2.3 HAVING 中的子查询 2.4 CASE中的子查询 2.5 子查询中的空值问题 2.5 非法使用子查询​编辑…

数字IC验证高频面试问题整理(附答案)

后台有同学私信想要验证的面试题目&#xff0c;这不就来了~ Q1.权重约束中”:”和 /”的区别 : 操作符表示值范围内的每一个值的权重是相同的,比如[1:3]:40,表示1&#xff0c;2&#xff0c;3取到的概率为40/120&#xff1b; :&#xff0f;操作符表示权重要平均分到值范围内的…

spring security(密码编码器、授权,会话)

目录 密码编码器 授权决策 AffirmativeBased ConsensusBased UnanimousBased 授权 web授权 HttpSecurity常用方法及说明 方法授权 会话控制 会话超时 安全会话cookie 密码编码器 Spring Security为了适应多种多样的加密类型&#xff0c;又做了抽象&#xff0c;D…

虚拟机配置

配置虚拟机网络 创建虚拟机 20G 4G内存 初始化用户名和密码 zhao 123456 克隆拷贝2个虚拟机 配置内存为2G 修改主机名和固定IP hostnamectl set-hostname node1 hostnamectl set-hostname node2 vim /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl stop network s…

渗透测试辅助工具箱

0x01 说明 渗透测试辅助工具箱 运行条件&#xff1a;jdk8 双击即可运行 反弹shell&#xff0c;命令生成器&#xff0c;自动编码&#xff0c;输入对应IP端口即可&#xff0c;实现一劳永逸&#xff0c;集成一些小工具&#xff0c;辅助渗透&#xff0c;提高效率 输入框说明 L…

TDengine 报错 failed to connect to server, reason: Unable to establish connection

一、前文 TDengine 入门教程——导读 二、遇到问题 taos 命令行&#xff08;CLI&#xff09;连接不上&#xff0c;进不去。 [rootiZ2ze30dygwd6yh7gu6lskZ ~]# taos Welcome to the TDengine Command Line Interface, Client Version:3.0.0.1 Copyright (c) 2022 by TDengine…

基于Azure实现Java访问OpenAI

之前使用了Java代码访问OpenAI&#xff1a;OpenAI注册以及Java代码调用_雨欲语的博客-CSDN博客但是需要vpn才能访问&#xff0c;现在可以基于微软的Azure访问OpenAI&#xff0c;不再需要vpn&#xff0c;官方文档&#xff1a;快速入门 - 开始通过 Azure OpenAI 服务使用 ChatGPT…

【国产虚拟仪器】基于JFM7K325T(复旦微FPGA)的高速数据采集平台

板卡概述 XM714是自主研制的一款5路HD-SDI视频采集图像处理平台&#xff0c;该平台采用上海复旦微的高性能Kintex系列FPGA加上华为海思的高性能视频处理器HI3531DV200来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&#xff0c;支持多种…

python:容器:字符串——常用操作

字符串[下标]根据下标索引取出特定位置字符字符串.index(字符串)查找给定字符的第一个匹配项的下标字符串.replace(字符串1,字符串2) 将字符串内的全部字符串1&#xff0c;替换为字符串2 不会修改原字符串&#xff0c;而是得到一个新的 字符串.split(字符串) 按照给定字符串&am…

[高光谱]使用PyTorch的dataloader加载高光谱数据

本文实验的部分代码参考 Hyperspectral-Classificationhttps://github.com/eecn/Hyperspectral-Classification如果对dataloader的工作原理不太清楚可以参见 [Pytorch]DataSet和DataLoader逐句详解https://blog.csdn.net/weixin_37878740/article/details/129350390?spm1001…

使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;使用Nextcl…

好程序员:如果你从6月份开始学Java编程......

现在学习Java编程还来得及&#xff1f;好程序员可以明确的告诉你&#xff1a;当然了~新手入门快&#xff0c;非常容易学。Java计算机语言也是一门面向对象的语言&#xff0c;更加符合人类的思想&#xff0c;所求皆对象&#xff0c;并没有指针等一些难理解的知识。Java覆盖面宽、…

2023最新软件测试面试题大全(包含答案)

前言 在我认为&#xff0c;对于测试面试以及进阶的最佳学习方法莫过于刷题博客书籍视频总结&#xff0c;前几者博主将淋漓尽致地挥毫于这篇博客文章中&#xff0c;至于总结在于个人&#xff0c;实际上越到后面你会发现面试并不难&#xff0c;其次就是在刷题的过程中有没有去思…

Power BI许可证差异(免费、Pro、PPU、Embedded、Premium)

不可否认&#xff0c;在商业BI软件中Power BI是最强大的&#xff0c;在2023年的Gartner的魔力象限中Power BI又是第一名Microsoft named a Leader in the 2023 Gartner Magic Quadrant™ for Analytics and BI PlatformsI[1] image.png 目前还没有使用Power BI的&#xff0c;甚…

Microsoft Build 发布,开发者可能关注的重点→

又是一年一度的 Microsoft Build 了&#xff0c;你有和我一样熬夜看了吗&#xff1f;如果没有&#xff0c;那么你就错过了一场精彩的技术盛宴。本次的 Microsoft Build&#xff0c;有非常多的干货&#xff0c;围绕打造 Copilot 应用展开。我会将基于 Data AI 比较重要的内容列…

2.1. 类与对象

在 Java 中&#xff0c;类和对象是面向对象编程的基本构建块。类是一种模板&#xff0c;用于定义对象的属性和行为。对象是类的实例&#xff0c;具有类定义的属性和行为。 2.1.1. 类的定义 要定义一个类&#xff0c;可以使用以下语法&#xff1a; class ClassName {// 成员变…

Java学习路线(17)——日志框架

一、日志技术概述 &#xff08;1&#xff09;概念&#xff1a; 日志是一种将系统运行信息封装至文件的一种记录载体。 &#xff08;2&#xff09;优势&#xff1a; 输出语句日志技术输出位置只能是控制台文件或数据库取消日志需要修改代码达成无需修改代码多线程性能较差性能较…