saber酱的抱枕

努力变强

01/25
03:22
软件

使用 Node.js 按图片宽高比例筛选图片

最近我从 Pixiv 下载了 800 多张图片,想挑选一些适合做电脑壁纸的,这就要求图片是横图,不能是竖图。一张张删除太麻烦,我就去搜索有没有什么软件可以按图片的宽高比例来筛选图片,结果没找到合适的。

今天我去某个群里问,有人说你用 python 写个脚本吧。自学 py?听起来不错,但一说到脚本,我就想起了今年下半年……咳咳,想起了 Node.js,都是脚本嘛,都要加载模块,何必去学一门新语言,那样需要花的时间太多了。

图片存放在 D:\download\test 文件夹里(本例中不包含子文件夹)。

使用 Node.js 按图片宽高比例筛选图片

删除后效果:

使用 Node.js 按图片宽高比例筛选图片

操作步骤:

首先在终端里 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!');
}

最后运行之,等待运行完毕即可。速度很快。

使用 Node.js 按图片宽高比例筛选图片


关于比例问题:

16:9 的图片宽高比是 1.78,在此基础上,值越小图片越竖,越大图片越扁长。但有时候图片稍微竖一点也可以当壁纸的,所以我实验一番取了 1.4 这个比例。

使用 Node.js 按图片宽高比例筛选图片