Оптимизация

This commit is contained in:
2025-05-15 22:21:25 +03:00
parent 9de00280ed
commit 7944cd0084

View File

@@ -233,7 +233,8 @@ def compress_with_pillow(path: Path) -> Tuple[bool, Path]:
def compress_image(path: Path):
global processed_count, skipped_count, skipped_size_count, error_count, total_saved_bytes, total_images_original_size, total_images_new_size, processed_hashes
global processed_count, skipped_count, skipped_size_count, error_count
global total_saved_bytes, total_images_original_size, total_images_new_size, processed_hashes
try:
original_size = path.stat().st_size
@@ -241,41 +242,41 @@ def compress_image(path: Path):
h = file_hash(path)
if path.stat().st_size < MAX_SIZE:
if original_size < MAX_SIZE:
logging.info(
f"Пропущено (малый размер): {path} ({path.stat().st_size // 1024} KB)"
f"Пропущено (малый размер): {path} ({original_size // 1024} KB)"
)
processed_hashes.add(h)
skipped_size_count += 1
total_images_new_size += original_size
return
file_path_str = str(path)
with db_lock:
cursor.execute(
"SELECT filename FROM processed_images WHERE hash = ?", (h,)
)
row = cursor.fetchone()
file_path = str(path)
if row:
processed_hashes.add(h)
skipped_count += 1
total_images_new_size += original_size
hash_files = row[0].split("|")
if file_path in hash_files:
existing_paths = set(row[0].split("|"))
if file_path_str in existing_paths:
logging.info(
f"Пропущено (уже обработано): {path} ({original_size // 1024} KB)"
)
else:
hash_files.append(file_path)
existing_paths.add(file_path_str)
cursor.execute(
"UPDATE processed_images SET filename = ? WHERE hash = ?",
("|".join(hash_files), h),
("|".join(sorted(existing_paths)), h),
)
conn.commit()
logging.info(
f"Пропущено (дубликат хэша, другой путь): {path} ({original_size // 1024} KB)"
)
processed_hashes.add(h)
skipped_count += 1
total_images_new_size += original_size
return
ext = path.suffix.lower()
@@ -288,13 +289,10 @@ def compress_image(path: Path):
total_images_new_size += new_size
if result:
h = file_hash(final_path)
processed_count += 1
new_hash = file_hash(final_path)
saved = original_size - new_size
total_saved_bytes += saved
percent = (1 - new_size / original_size) * 100
logging.info(
f"Сжато: {path} ({original_size // 1024} KB -> {new_size // 1024} KB, {percent:.2f}%)"
)
@@ -302,34 +300,36 @@ def compress_image(path: Path):
with db_lock:
cursor.execute(
"SELECT filename FROM processed_images WHERE hash = ?",
(h,),
(new_hash,),
)
row = cursor.fetchone()
file_path = str(final_path)
if row:
hash_files = row[0].split("|")
if file_path not in hash_files:
hash_files.append(file_path)
paths = set(row[0].split("|"))
paths.add(str(final_path))
cursor.execute(
"UPDATE processed_images SET filename = ? WHERE hash = ?",
("|".join(hash_files), h),
("|".join(sorted(paths)), new_hash),
)
conn.commit()
else:
cursor.execute(
"INSERT INTO processed_images(hash, filename) VALUES(?, ?)",
(h, file_path),
(new_hash, str(final_path)),
)
conn.commit()
processed_hashes.add(new_hash)
processed_count += 1
total_saved_bytes += saved
else:
error_count += 1
logging.error(f"Не удалось сжать: {path}")
processed_hashes.add(h)
except Exception as e:
error_count += 1
total_images_new_size += original_size
except Exception as e:
logging.error(f"Ошибка при обработке {path}: {e}")
error_count += 1
total_images_new_size += original_size
def find_images(root: Path):