C/C++教程

怎么用node 删除重复照片-icode9专业技术文章分享

本文主要是介绍怎么用node 删除重复照片-icode9专业技术文章分享,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

删除重复照片可以通过比较照片的哈希值来实现。哈希值可以唯一地标识一张照片,如果两张照片的哈希值相同,则它们是相同的图片。以下是一个使用 Node.js 和 image-hash 库来删除重复照片的示例代码。

首先,安装所需的依赖库:

npm install fs path image-hash

Shell

然后,编写一个脚本来删除重复的照片:

const fs = require('fs');
const path = require('path');
const { createHash } = require('crypto');
const { getImageHash } = require('image-hash');

const directoryPath = './photos'; // 替换为你的照片目录

async function getPhotoHashes(directory) {
  const files = fs.readdirSync(directory);
  const photoHashes = new Map();

  for (const file of files) {
    const filePath = path.join(directory, file);
    if (fs.statSync(filePath).isFile()) {
      try {
        const hash = await getImageHash(filePath);
        if (photoHashes.has(hash)) {
          photoHashes.get(hash).push(filePath);
        } else {
          photoHashes.set(hash, [filePath]);
        }
      } catch (error) {
        console.error(`无法处理文件 ${filePath}: ${error.message}`);
      }
    }
  }

  return photoHashes;
}

async function deleteDuplicatePhotos(directory) {
  const photoHashes = await getPhotoHashes(directory);

  for (const [hash, filePaths] of photoHashes) {
    if (filePaths.length > 1) {
      console.log(`发现重复照片,哈希值: ${hash}`);
      for (let i = 1; i < filePaths.length; i++) {
        const filePath = filePaths[i];
        console.log(`删除文件: ${filePath}`);
        fs.unlinkSync(filePath);
      }
    }
  }
}

deleteDuplicatePhotos(directoryPath)
  .then(() => console.log('删除重复照片完成'))
  .catch(error => console.error(`发生错误: ${error.message}`));

JavaScript

这个脚本的工作原理如下:

  1. 读取目录中的所有文件:使用 fs.readdirSync 读取指定目录中的所有文件。
  2. 计算每张照片的哈希值:使用 image-hash 库计算每张照片的哈希值。
  3. 存储哈希值和文件路径:使用 Map 存储每张照片的哈希值及其对应的文件路径。
  4. 删除重复的照片:如果某个哈希值对应多个文件路径,则删除除第一个文件之外的所有文件。

你可以将这段代码保存到一个文件中(例如 deleteDuplicatePhotos.js),然后在命令行中运行:

node deleteDuplicatePhotos.js

标签: 来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

这篇关于怎么用node 删除重复照片-icode9专业技术文章分享的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!