--- tags: Python系統設計 --- # 图片转文字格式 X|Y|FFFFFF ## multi_image_to_rgb ```python # 导入 PIL 库中的 Image 模块,用于打开和处理图像 try: from PIL import Image # 图像处理库 except ImportError as e: print("Pillow 图像处理库未安装或无法加载。") print("错误信息:", e) input("按 Enter 退出") exit(1) # 导入 tkinter 库,用于弹出文件选择对话框 import tkinter as tk # 从 tkinter 中导入文件对话框模块 from tkinter import filedialog # 导入 os 模块,用于处理文件路径 import os # 定义一个函数:将图片转换为 y|x|RRGGBB 的文本格式 def convert_image_to_rgb_text(image_path): # 打开图像并转换为 RGB 模式(即确保每个像素都有 R、G、B 三个分量) img = Image.open(image_path).convert("RGB") # 获取图像的宽度和高度 width, height = img.size # 加载像素数据 pixels = img.load() # 初始化结果列表 output = [] # 遍历图像的每一行和每一列 for y in range(height): # 行 for x in range(width): # 列 # 获取当前像素的 RGB 值 r, g, b = pixels[x, y] # 格式化为六位的十六进制颜色字符串(如:FFFFFF) hex_color = f"{b:02X}{g:02X}{r:02X}" # 拼接为 y|x|RRGGBB 格式,并加入列表 output.append(f"{y}|{x}|{hex_color}") # 将所有像素信息连接成一个以逗号分隔的字符串 return ",".join(output) # 主程序入口函数 def main(): # 创建一个 Tkinter 根窗口对象(但不显示它) root = tk.Tk() root.withdraw() # 隐藏主窗口,只显示文件对话框 # 弹出文件选择对话框,允许用户多选图片文件 file_paths = filedialog.askopenfilenames( title="选择图片文件", # 对话框标题 filetypes=[("Image files", "*.bmp *.png *.jpg *.jpeg *.gif")] # 限定可选的图片格式 ) # 如果用户没有选择任何文件,程序结束 if not file_paths: print("未选择任何文件。") return # 遍历每一个选中的图片文件 for image_path in file_paths: try: # 调用函数将图像转换为 RGB 格式的文本数据 rgb_data = convert_image_to_rgb_text(image_path) # 获取图片的文件名(不包含扩展名),作为输出文件名的基础 base_name = os.path.splitext(os.path.basename(image_path))[0] # 拼接输出的文本文件完整路径(与图片同目录) output_path = os.path.join(os.path.dirname(image_path), base_name + ".txt") # 将 RGB 数据写入文本文件 with open(output_path, "w") as f: f.write(rgb_data) # 打印保存成功的提示 print(f"已保存:{output_path}") except Exception as e: # 如果处理某张图片出错,打印错误信息 print(f"处理失败:{image_path},错误:{e}") # 如果本文件作为主程序运行,则执行 main 函数 if __name__ == "__main__": try: main() except Exception as e: print("程序发生错误:", e) input("按 Enter 键退出...") ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up