2020/11/30

[NodeJS]特定のフォルダにある画像ファイルのサイズを一覧表示できるようにしました

nodejs

概要

nodejsを使って、特定のディレクトリにある全てのファイルを抽出して、幅と高さを一覧でコンソールに出力するようにしました

画像内の物体検出を最近やる機会があるのですが、
画像内の物体検出で利用しているOpen Image Datasetのファイルのサイズを一覧で表示したかったのが理由です。

実装内容

  • probe-image-sizeを利用させていただきました
    • npm install probe-image-size で事前にインストールしておきます
  • ls_img_details.js という名前で保存しておきます。
  • jpgだけをフィルタしていますが、うまくフィルタすれば、pngなども対応できるはずです
const fs = require('fs');
const path = require('path');
const probe = require('probe-image-size');

async function listFiles(dirpath, callback) {
    callback("filename\twidth\theight")
    try {
        const files = fs.readdirSync(dirpath);
        for (const filename of files) {
            if (!filename.match(/\.jpe?g/)) continue;
            const filepath = path.join(dirpath, filename);
            try {
                const metadata = await probe(fs.createReadStream(filepath));
                const result = [filename, metadata.width, metadata.height].join('\t')
                callback(result)
            } catch (e) {
                console.log(`error while get dimensions of ${filename}`);
                console.log(e);
            }
        }
    } catch (e) {
        callback({err: e});
    }
}

(async (dirpath, callback) => {
    await listFiles(dirpath, callback);
})(process.argv[2], console.log);

利用方法

$ node ls_img_details.js /path/to/target
filename        width   height
0001eeaf4aed83f9.jpg    1024    447
0004886b7d043cfd.jpg    1024    1024
000595fe6fee6369.jpg    1024    681
00075905539074f2.jpg    1024    914
... 以下略 ...

以上です。
結構便利でした。