因为本人平时喜好存一些图片,但经常批量下载,存了又不怎么看,因此有很多图片实际上并不需要,因此我想到了这个办法。

使用这个工具,输入路径后,会自动随机抽取路径下的两张图片,然后可以自己选择留下哪一张,或者是直接跳过。

同时,我还使用了HTTP服务,因此可以躺床上用手机操作。

开始运行后访问localhost:1145即可。

代码如下。

import os
import random
from pywebio.input import *
from pywebio.output import *
from pywebio import start_server
import shutil

directory = [
    "D:\\projects\\image-cleaner",
    # "D:\\projects\\image-cleaner\\test",
    "D:\\Pics\\all",
    "D:\\Pics\\1",
    "D:\\Pics\\2",
    "D:\\Pics\\3",
]


# 1. 读取目录内的随机两张图片
def get_random_images(directory):
    images = [f for f in os.listdir(directory) if f.endswith((".png", ".jpg", ".jpeg"))]
    if len(images) < 2:
        return None
    selected_images = random.sample(images, 2)
    return [os.path.join(directory, img) for img in selected_images]


# 2. 显示图片并处理用户选择
def show_images(epoch):
    while True:
        image_paths = get_random_images(directory[epoch])
        if not image_paths:
            put_text("目录中没有足够的图片")
            break

        # 显示图片
        img1 = open(image_paths[0], "rb").read()
        img2 = open(image_paths[1], "rb").read()
        put_row(
            [
                put_image(img1),
                put_image(img2),
            ]
        )

        # 创建按钮
        choice = actions("", ["留下左边", "留下右边", "都可以", "都不行"])

        # 刷新页面
        clear()
        # 处理用户选择
        if choice == "留下左边":
            shutil.move(image_paths[0], directory[epoch + 1])
            os.remove(image_paths[1])
        elif choice == "留下右边":
            shutil.move(image_paths[1], directory[epoch + 1])
            os.remove(image_paths[0])
        elif choice == "都可以":
            shutil.move(image_paths[0], directory[epoch + 1])
            shutil.move(image_paths[1], directory[epoch + 1])
        elif choice == "都不行":
            os.remove(image_paths[0])
            os.remove(image_paths[1])


# 3. 开启HTTP服务
def main():
    choice = actions("", ["测试", "第一轮", "第二轮", "第三轮"])
    if choice == "测试":
        show_images(0)
    elif choice == "第一轮":
        show_images(1)
    elif choice == "第二轮":
        show_images(2)
    elif choice == "第三轮":
        show_images(3)


start_server(main, port=1145)