-
Notifications
You must be signed in to change notification settings - Fork 0
/
cover-crt.py
117 lines (86 loc) · 3.26 KB
/
cover-crt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os
from tkinter import Tk, Canvas, Entry, Label, Button
from PIL import Image, ImageTk
start_y = 0
rect_start_y1 = 0
rect_start_y2 = 0
current_image_index = 0
image_dir = "./pics"
image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(("jpg"))]
# 获取鼠标位置,防止rect中心线向鼠标吸附
def on_press(event):
global start_y, rect_start_y1, rect_start_y2
start_y = event.y
rect_start_y1 = canvas.coords(rect)[1]
rect_start_y2 = canvas.coords(rect)[3]
def on_drag(event):
global start_y
# 用于自定义选取框高度
try:
box_height = int(height_entry.get())
except ValueError:
box_height = 500
dy = event.y - start_y
new_y1 = rect_start_y1 + dy
new_y2 = rect_start_y2 + dy
# 防止选取框被拖到图片外
if new_y1 >= 0 and new_y2 <= image.height:
canvas.coords(rect, 0, new_y1, image.width, new_y2)
# 更新cover_crt_label标签内容,显示中心线y坐标
def on_release(event):
global cover_crt_label
x1, y1, x2, y2 = canvas.coords(rect)
y_center = (y1 + y2) / 2
cover_crt_label.config(text=f"cover_crt={y_center}")
def load_next_image():
global current_image_index, photo, image, rect, image_canvas
x1, y1, x2, y2 = canvas.coords(rect)
y_center = (y1 + y2) / 2
rename(y_center, image_files[current_image_index])
current_image_index += 1
if current_image_index >= len(image_files):
current_image_index = 0
try:
image_path = os.path.join(image_dir, image_files[current_image_index])
image = Image.open(image_path)
except FileNotFoundError:
canvas.delete("all")
cover_crt_label.config(text="图片已全部处理完毕")
return
photo = ImageTk.PhotoImage(image)
canvas.itemconfig(image_canvas, image=photo)
canvas.coords(rect, 0, 50, image.width, 500)
canvas.config(width=image.width, height=image.height)
cover_crt_label.config(text=f"cover_crt={y_center}")
def rename(y_center, current_image):
current_path = os.path.join(image_dir, current_image)
filename, file_extension = os.path.splitext(current_image)
new_name = f"{filename}_cover_crt-{int(y_center)}{file_extension}"
new_path = os.path.join(image_dir, new_name)
os.rename(current_path, new_path)
root = Tk()
root.title("cover_crt图片编辑")
height_label = Label(root, text="选取框高度:")
height_label.pack()
height_entry = Entry(root)
height_entry.pack()
height_entry.insert(0, "500")
cover_crt_label = Label(root, text="cover_crt=")
cover_crt_label.pack()
next_button = Button(root, text="重命名并下一张", command=load_next_image)
next_button.pack()
canvas = Canvas(root)
canvas.pack()
image_path = os.path.join(image_dir, image_files[current_image_index])
image = Image.open(image_path)
photo = ImageTk.PhotoImage(image)
image_canvas = canvas.create_image(0, 0, image=photo, anchor="nw")
canvas.config(width=image.width, height=image.height)
rect = canvas.create_rectangle(0, 50, image.width, 500, outline="red", width=5)
x1, y1, x2, y2 = canvas.coords(rect)
y_center = (y1 + y2) / 2
cover_crt_label.config(text=f"cover_crt={y_center}")
canvas.bind("<B1-Motion>", on_drag)
canvas.bind("<ButtonPress-1>", on_press)
canvas.bind("<ButtonRelease-1>", on_release)
root.mainloop()