最近我从 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 这个比例。
Google Chrome 101
Windows 10/11
Google Chrome 101
Windows 10/11 我下载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)[39m
F:\test>
Google Chrome 101
Windows 10/11 我参照你的做法,把js文件放在F盘,把图片放在test文件夹。
这样运行js后没有任何反应。
cmd窗口长这样。
F:\>node 000AAA.js
F:\>
Google Chrome 70
Windows 10/11 放假了在家也是想更新一下壁纸。记得在手机浏览过这个文章的标题就进来看了。很实用呀。感谢站长带着小白飞~
大佬你好。我纯新手。折腾了一整晚都没弄明白怎么用。运行npm install image-size这个命令需要前提吗?image-size项目地址下载的包怎么用?