You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
import time
from PIL import Image
# 导入配置
from Config import target_width, image_quality, compressed_images_dir
def process_image(img_path, target_width=target_width):
"""
处理图像
:param img_path: 输入图像路径
:param target_width: 目标宽度默认587像素根据用户提供的好用图片尺寸
:param output_path: 输出结果的文件路径(可选)
:param raw_output_path: 原始OCR结果的输出文件路径可选
:return: OCR识别结果
"""
start_time = time.time()
# 图片预处理 - 缩小图片尺寸到指定宽度
img = Image.open(img_path)
width, height = img.size
print(f"原始图片尺寸: {width}x{height}")
# 计算缩放比例,保持纵横比
scale = target_width / width
new_width = target_width
new_height = int(height * scale)
print(f"目标图片尺寸: {new_width}x{new_height}")
# 缩放图像
resized_img = img.resize((new_width, new_height), Image.LANCZOS)
# 确保压缩图片目录存在
os.makedirs(compressed_images_dir, exist_ok=True)
# 获取原始文件名并创建新的输出路径
file_name = os.path.basename(img_path)
output_name = os.path.splitext(file_name)[0] + "_compressed.jpg"
output_path = os.path.join(compressed_images_dir, output_name)
# 保存缩小后的图片
resized_img.convert('RGB').save(output_path, 'JPEG', quality=image_quality, optimize=True)
print(f"图片已缩小: {width}x{height} -> {new_width}x{new_height}")
# 释放内存
del resized_img
img.close()
del img
if __name__ == "__main__":
import glob
from Config import images_dir
# 处理Images目录下的所有PNG图片
image_files = glob.glob(os.path.join(images_dir, "page_*.png"))
print(f"找到{len(image_files)}个图片文件需要处理")
for i, img_path in enumerate(image_files):
print(f"[{i+1}/{len(image_files)}] 处理图片: {os.path.basename(img_path)}")
process_image(img_path)
print(f"所有图片处理完成,压缩后的图片保存在: {compressed_images_dir}")