返回

揭秘如何揪出手机相册中的重复照片,还你珍贵的存储空间!

前端

引言

在数字时代,照片已经成为我们记录生活、分享欢乐、表达情感不可或缺的一部分。随着智能手机的普及和摄影功能的不断提升,人们随时随地拍照的习惯也让手机相册中照片的数量不断增加。然而,随着照片数量的激增,重复照片也随之而来,不仅占据了宝贵的存储空间,还给照片管理带来了不便。

Node.js 重复照片查找程序

为了解决重复照片的困扰,我们可以借助 Node.js 来编写一个重复照片查找程序,帮助我们快速找出并删除重复的照片,从而释放手机存储空间,优化照片管理。

准备工作

在开始编写程序之前,我们需要安装必要的 Node.js 模块。这里我们使用 sharp 模块来处理图像,fs 模块来读取和写入文件,以及 path 模块来处理文件路径。

npm install sharp fs path

程序编写

现在,让我们一步一步地编写程序。

// 导入必要的模块
const sharp = require('sharp');
const fs = require('fs');
const path = require('path');

// 定义要查找重复照片的目录
const directory = './photos';

// 扫描目录中的所有照片
fs.readdir(directory, (err, files) => {
  if (err) {
    console.error('Error reading directory:', err);
    return;
  }

  // 创建一个对象来存储所有照片的哈希值
  const hashes = {};

  // 遍历每个照片文件
  files.forEach((file) => {
    // 获取照片的绝对路径
    const filePath = path.join(directory, file);

    // 使用 sharp 模块计算照片的哈希值
    sharp(filePath)
      .hash(function (err, hash) {
        if (err) {
          console.error('Error calculating hash:', err);
          return;
        }

        // 将照片的哈希值添加到哈希值对象中
        hashes[hash] = hashes[hash] || [];
        hashes[hash].push(filePath);
      });
  });

  // 等待所有照片的哈希值计算完成
  setTimeout(() => {
    // 找到所有重复照片的组
    const duplicateGroups = Object.values(hashes).filter((group) => group.length > 1);

    // 删除重复照片
    duplicateGroups.forEach((group) => {
      // 保留第一张照片,删除其他重复照片
      for (let i = 1; i < group.length; i++) {
        fs.unlink(group[i], (err) => {
          if (err) {
            console.error('Error deleting file:', err);
            return;
          }

          console.log('Deleted duplicate file:', group[i]);
        });
      }
    });

    console.log('Duplicate photos removed successfully!');
  }, 1000);
});

程序运行

将上述代码保存为一个 .js 文件,然后在终端中使用以下命令运行程序:

node ./find-duplicate-photos.js

程序运行后,它会扫描指定的目录,计算每张照片的哈希值,并将其存储在一个对象中。然后,它会找到所有重复照片的组,并删除重复照片,只保留第一张照片。

总结

通过使用 Node.js 编写重复照片查找程序,我们可以轻松地找出并删除手机相册中的重复照片,释放手机存储空间,优化照片管理。这个程序可以帮助您节省大量的时间和精力,让您轻松管理手机相册,享受更加愉快的拍照体验。