最近我从 Pixiv 下载了 800 多张图片,想挑选一些适合做电脑壁纸的,这就要求图片是横图,不能是竖图。一张张删除太麻烦,我就去搜索有没有什么软件可以按图片的宽高比例来筛选图片,结果没找到合适的。
今天我去某个群里问,有人说你用 python 写个脚本吧。自学 py?听起来不错,但一说到脚本,我就想起了今年下半年……咳咳,想起了 Node.js,都是脚本嘛,都要加载模块,何必去学一门新语言,那样需要花的时间太多了。
图片存放在 D:\download\test 文件夹里(本例中不包含子文件夹)。
删除后效果:
操作步骤:
首先在终端里 cd 到 D:\download 文件夹,然后安装 image-size 包:
npm install image-size
这会在当前目录里保存这个模块,如果设置过 NODE_PATH 环境变量,也可以加上 -g 参数全局安装。
接下来编写一个 check.js,保存在 D:\download 里。内容如下:
var fs = require('fs'); var path = require('path'); var sizeOf = require('image-size'); var fileDirectory = path.resolve('D:\\download\\test'); if (fs.existsSync(fileDirectory)) { // 判断目录是否存在 fs.readdir(fileDirectory, function (err, files) { // 获取文件列表 if (err) { console.log(err); return; } // 循环文件 files.forEach(function (filename) { var filepath = path.join(fileDirectory, filename); // 获取当前文件的绝对路径 var dimensions = sizeOf(filepath); // 获取图片尺寸 var width = dimensions.width; var height = dimensions.height; // console.log(width + ' x ' + height); if (width / height < 1.4) { // 16:9 的值是 1.78,值越小图片越竖,越大图片越扁 fs.unlink(filepath, function (err) { if (err) { console.log(err); return; } console.log('del ' + filepath); }); } }); }); } else { console.log(fileDirectory + ' Not Found!'); }
最后运行之,等待运行完毕即可。速度很快。
关于比例问题:
16:9 的图片宽高比是 1.78,在此基础上,值越小图片越竖,越大图片越扁长。但有时候图片稍微竖一点也可以当壁纸的,所以我实验一番取了 1.4 这个比例。
使用 Node.js 按图片宽高比例筛选图片
-
Google Chrome 101Windows -
Google Chrome 101Windows 我下载image-size包后解压cd到解压目录内运行npm install image-size。
然后运行筛选后显示下面的内容F:\test>node 000AAA.js
D:\Softwares\nodejs\node_global\node_modules\image-size\dist\index.js:51
throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')');
^TypeError: unsupported file type: undefined (file: F:\test\000AAA-cmd-here.exe)
at lookup (D:\Softwares\nodejs\node_global\node_modules\[4mimage-size[24m\dist\index.js:51:11)
at imageSize (D:\Softwares\nodejs\node_global\node_modules\[4mimage-size[24m\dist\index.js:124:16)
at F:\test\000AAA.js:15:30
at Array.forEach ()
at F:\test\000AAA.js:13:15
[90m at FSReqCallback.oncomplete (node:fs:188:23)[39mF:\test>
-
Google Chrome 101Windows 我参照你的做法,把js文件放在F盘,把图片放在test文件夹。
这样运行js后没有任何反应。
cmd窗口长这样。F:\>node 000AAA.js
F:\>
-
-
-
Google Chrome 70Windows 放假了在家也是想更新一下壁纸。记得在手机浏览过这个文章的标题就进来看了。很实用呀。感谢站长带着小白飞~
大佬你好。我纯新手。折腾了一整晚都没弄明白怎么用。运行npm install image-size这个命令需要前提吗?image-size项目地址下载的包怎么用?