图片批量评级工具星级评价

联启 电脑工具 15

本文目录导读:

图片批量评级工具星级评价-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 方案一:本地桌面应用(Python + Tkinter / PyQt)
  2. 方案二:Web 版(Flask + HTML + JavaScript)
  3. 方案三:轻量级脚本工具
  4. 建议与注意事项

由于我是一个AI文本模型,无法直接运行图形界面软件,但我可以提供 完整的代码逻辑(Python + Tkinter/Flask) 以及 操作流程设计,您可以根据需要选择实现方式。


本地桌面应用(Python + Tkinter / PyQt)

适合需要离线、快速、处理大量本地图片的用户。

核心功能设计

  1. 加载目录:选择文件夹,自动扫描所有图片(jpg, png, raw等)。
  2. 展示模式
    • 单张展示:大图预览,适合精细评级。
    • 缩略图网格:多图同时显示,适合快速批量打分。
  3. 星级操作
    • 鼠标点击星标(1-5星)。
    • 键盘快捷键(如 12345 键快速打分,0Space 清除评分)。
  4. 数据存储:推荐以下两种方式:
    • 方式A(无损):将评分写入图片文件的 XMP元数据xmp:Rating 字段),不影响画质,兼容Lightroom等专业软件。
    • 方式B(简单):在图片同目录下生成一个 ratings.csv 文件,记录 文件名,星级
  5. 筛选过滤
    • 按星级筛选(如只显示4星以上的图)。
    • 按未评分筛选。

Python 核心代码示例(Tkinter + Pillow + piexif)

import os
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import piexif  # 用于读写图片元数据
class ImageRatingApp:
    def __init__(self, root):
        self.root = root
        self.root.title("图片批量星级评价工具")
        self.image_paths = []
        self.current_index = 0
        self.rating = 0
        # UI 布局
        self.label = tk.Label(root, text="请选择一个图片文件夹")
        self.label.pack()
        self.canvas = tk.Canvas(root, width=800, height=600, bg='gray')
        self.canvas.pack()
        self.star_frame = tk.Frame(root)
        self.star_frame.pack()
        self.star_buttons = []
        for i in range(1, 6):
            btn = tk.Button(self.star_frame, text=f"{i}★", command=lambda i=i: self.set_rating(i))
            btn.pack(side=tk.LEFT, padx=5)
            self.star_buttons.append(btn)
        self.nav_frame = tk.Frame(root)
        self.nav_frame.pack()
        tk.Button(self.nav_frame, text="上一张 (←)", command=self.prev_image).pack(side=tk.LEFT)
        tk.Button(self.nav_frame, text="下一张 (→)", command=self.next_image).pack(side=tk.LEFT)
        tk.Button(root, text="打开文件夹", command=self.load_folder).pack()
        # 键盘绑定
        root.bind('<Left>', lambda e: self.prev_image())
        root.bind('<Right>', lambda e: self.next_image())
        for i in range(1, 6):
            root.bind(str(i), lambda e, i=i: self.set_rating(i))
    def load_folder(self):
        folder = filedialog.askdirectory()
        if folder:
            self.image_paths = [os.path.join(folder, f) for f in os.listdir(folder) 
                               if f.lower().endswith(('png','jpg','jpeg','bmp','tiff'))]
            self.current_index = 0
            self.show_image()
    def show_image(self):
        if not self.image_paths: return
        path = self.image_paths[self.current_index]
        img = Image.open(path)
        img.thumbnail((800, 600))
        self.tk_img = ImageTk.PhotoImage(img)
        self.canvas.config(width=self.tk_img.width(), height=self.tk_img.height())
        self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tk_img)
        self.label.config(text=f"{self.current_index+1}/{len(self.image_paths)} - {os.path.basename(path)}")
        self.load_rating_from_exif(path)
    def set_rating(self, rating):
        self.rating = rating
        path = self.image_paths[self.current_index]
        # 写入 XMP 元数据(简化版,实际可用 piexif 或 pyxmp)
        try:
            exif_dict = piexif.load(path)
            # piexif 通过 UserComment 模拟,或直接写 XMP(需额外库)
            # 这里用文件名简单示例
            print(f"评分 {rating} -> {path}")
            # 实际写入将使用: save_rating_to_exif(path, rating)
        except:
            pass
        # 更新UI星标显示
        self.update_star_display()
    def prev_image(self):
        if self.current_index > 0:
            self.current_index -= 1
            self.show_image()
    def next_image(self):
        if self.current_index < len(self.image_paths)-1:
            self.current_index += 1
            self.show_image()
    def update_star_display(self):
        for i, btn in enumerate(self.star_buttons):
            if i < self.rating:
                btn.config(bg='gold')
            else:
                btn.config(bg='SystemButtonFace')

Web 版(Flask + HTML + JavaScript)

适合团队协作、跨平台、无需安装软件的场景。

快速搭建步骤

  1. 后端(Python Flask)
    • 提供 API:/images 返回图片列表。
    • 提供 API:/rate 接收 {"filename": "xxx.jpg", "rating": 4}
    • 存储到 SQLite 或 JSON 文件。
  2. 前端(HTML + JS)
    • 使用星级评分组件(如 Font Awesome 或纯 CSS 星星)。
    • 左右箭头切换图片。
    • AJAX 异步提交评分。

轻量级脚本工具

如果你只需要一次性的快速评分,不依赖 GUI,可以使用命令行脚本:

# 命令行工具:通过终端快速为图片打分
python batch_rating.py --folder "D:\图片" --star 4 --output rating.csv

建议与注意事项

  1. 处理大量图片(>10000张):建议使用 缩略图模式SQLite 数据库存储评分,避免每次启动扫描目录。
  2. 元数据标准
    • 如果目标是与 Adobe LightroomCapture One 兼容,请使用 XMP 的 Rating 字段
    • 如果只是简单管理,使用 文件名重命名(如 IMG_001_5star.jpg)或 同级 CSV
  3. 进阶功能
    • 颜色标签:增加红黄绿蓝标签(对应 Lightroom 的颜色标签)。
    • 增加文本标签输入框。
    • 双图对比:左右两张图并排,方便选片。

如果您需要我生成 完整的、可直接运行的代码(Python 桌面版或 Web 版),请告诉我您的偏好(Windows/Mac/Linux、本地或Web、使用场景),我可以为您整理一份可直接 Copy 的代码包。

标签: 星级评价

抱歉,评论功能暂时关闭!