如何获取PNG图片总亮度值及批量处理文件夹内图片的方案
计算PNG图片总亮度及批量处理方案
一、单张PNG图片总亮度计算
依赖准备
先安装Python的Pillow图像处理库:
pip install pillow
核心实现
采用行业常用的感知亮度计算公式(两种主流可选,根据场景选择):
- BT.709标准(适合数字显示场景):
亮度 = 0.2126*R + 0.7152*G + 0.0722*B - BT.601标准(适合打印场景):
亮度 = 0.299*R + 0.587*G + 0.114*B
代码示例:
from PIL import Image def calculate_total_brightness(image_path, use_bt709=True): # 打开图片并转为RGB模式(避免RGBA等格式干扰) img = Image.open(image_path).convert('RGB') total_brightness = 0 # 选择亮度计算系数 r_coeff, g_coeff, b_coeff = (0.2126, 0.7152, 0.0722) if use_bt709 else (0.299, 0.587, 0.114) # 遍历所有像素计算总亮度(优化版,比逐个坐标遍历更快) for r, g, b in img.getdata(): total_brightness += r_coeff * r + g_coeff * g + b_coeff * b return total_brightness # 测试单张图片 if __name__ == "__main__": total = calculate_total_brightness("test.png") print(f"单张图片总亮度: {total:.2f}")
二、文件夹内PNG批量处理
基于上面的单张处理函数,扩展实现批量遍历文件夹内所有PNG图片,结果保存到文本文件:
import os def batch_process_folder(folder_path, output_file="brightness_results.txt"): # 创建结果文件并写入内容 with open(output_file, 'w', encoding='utf-8') as result_file: # 遍历文件夹内所有文件 for filename in os.listdir(folder_path): # 只处理PNG格式(忽略大小写) if filename.lower().endswith('.png'): file_full_path = os.path.join(folder_path, filename) try: # 计算总亮度 total_bright = calculate_total_brightness(file_full_path) # 写入结果 result_file.write(f"{filename}: {total_bright:.2f}\n") print(f"已完成: {filename}") except Exception as e: # 捕获处理失败的情况 result_file.write(f"{filename}: 处理失败 - {str(e)}\n") print(f"处理出错: {filename} - {str(e)}") # 批量处理示例 if __name__ == "__main__": batch_process_folder("你的文件夹路径")
补充说明
- 如果需要平均亮度,只需将总亮度除以图片总像素数:
average_brightness = total_brightness / (img.width * img.height) - 关于亮度公式的选择:没有统一共识是因为不同场景对亮度的感知需求不同,上述两种标准均为行业广泛认可的方案,按需选择即可。
内容的提问来源于stack exchange,提问作者PBAB
相关产品推荐
相关产品推荐

