78 lines
2.5 KiB
Python
Raw Permalink Normal View History

2025-04-10 17:31:33 +08:00
import argparse
from PIL import Image
def rgb_to_rg565(r, g, b):
# 将RGB数据转换为RG565格式
r5 = (r >> 3) & 0x1F
g6 = (g >> 2) & 0x3F
b5 = (b >> 3) & 0x1F
return (r5 << 11) | (g6 << 5) | b5
def rg565_to_rgb(rg565):
# 将RG565数据转换回RGB数据
r = (rg565 >> 11) & 0x1F
g = (rg565 >> 5) & 0x3F
b = rg565 & 0x1F
return (r << 3, g << 2, b << 3)
def convert_to_rg565(img):
# 获取图片的像素数据
pixels = img.getdata()
# 将每个像素的RGB数据转换为RG565格式
# rg565_pixels = [rgb_to_rg565(pixel[0], pixel[1], pixel[2]) for pixel in pixels]
rg565_pixels = [rgb_to_rg565(pixel[2], pixel[1], pixel[0]) for pixel in pixels]
# 创建一个新的图片对象
new_img = Image.new('RGB', img.size)
# 将RG565数据转换回RGB数据并设置新的像素数据
new_pixels = [rg565_to_rgb(pixel) for pixel in rg565_pixels]
new_img.putdata(new_pixels)
return new_img
def convert_to_jpeg(input_image_path, output_image_path):
# 打开输入图片
with Image.open(input_image_path) as img:
# 获取原始图片的尺寸
original_size = img.size
# 将图片转换为RGB模式如果它不是RGB模式
if img.mode != 'RGB':
img = img.convert('RGB')
# 将RGB数据转换为RG565格式
img = convert_to_rg565(img)
# 确保图片的尺寸与原始尺寸一致
if img.size != original_size:
img = img.resize(original_size)
# 保存为JPEG格式
img.save(output_image_path, 'JPEG')
if __name__ == "__main__":
# 创建命令行参数解析器
parser = argparse.ArgumentParser(description="Convert a 24-bit color image to a 16-bit color (RG565) image and save as JPEG.")
# 添加输入图片路径参数
parser.add_argument('input_image', type=str, help='Path to the input image file')
# 添加输出目录参数
parser.add_argument('output_directory', type=str, help='Path to the output directory')
# 解析命令行参数
args = parser.parse_args()
# 获取输入图片路径
input_image_path = args.input_image
# 获取输出目录路径
output_directory = args.output_directory
# 构建输出图片路径
output_image_path = f"{output_directory}/{input_image_path.split('/')[-1].split('.')[0]}.jpg"
# 调用函数进行转换
convert_to_jpeg(input_image_path, output_image_path)
print(f"图片已保存为 {output_image_path}")