save code
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import json
|
||||
from PIL import Image
|
||||
import os
|
||||
|
||||
# 全局变量定义分辨率
|
||||
RESIZE_TO = (360, 360)
|
||||
LARGE_IMAGE_SIZE = (2880, 2880)
|
||||
IMAGE_COUNT = 64
|
||||
|
||||
ROOT_DIR = '../example/src/main/assets/pic'
|
||||
|
||||
def load_json(file_path):
|
||||
with open(file_path, 'r') as file:
|
||||
return json.load(file)
|
||||
|
||||
def remove_white_border(image):
|
||||
"""
|
||||
去除图片边缘的一个像素宽的白色边框。
|
||||
:param image: 输入的PIL Image对象。
|
||||
:return: 处理后的PIL Image对象。
|
||||
"""
|
||||
# 获取图像尺寸
|
||||
width, height = image.size
|
||||
|
||||
# 定义白色阈值,允许一定的误差范围
|
||||
white_threshold = (250, 250, 250)
|
||||
|
||||
# 查找左边界
|
||||
left = 0
|
||||
while left < width and all(image.getpixel((left, y))[:3] >= white_threshold for y in range(height)):
|
||||
left += 1
|
||||
|
||||
# 查找右边界
|
||||
right = width - 1
|
||||
while right > 0 and all(image.getpixel((right, y))[:3] >= white_threshold for y in range(height)):
|
||||
right -= 1
|
||||
|
||||
# 查找上边界
|
||||
top = 0
|
||||
while top < height and all(image.getpixel((x, top))[:3] >= white_threshold for x in range(width)):
|
||||
top += 1
|
||||
|
||||
# 查找下边界
|
||||
bottom = height - 1
|
||||
while bottom > 0 and all(image.getpixel((x, bottom))[:3] >= white_threshold for x in range(width)):
|
||||
bottom -= 1
|
||||
|
||||
# 如果发现有白色边框,则裁剪它们
|
||||
if left < right and top < bottom:
|
||||
image = image.crop((left, top, right + 1, bottom + 1))
|
||||
|
||||
return image
|
||||
|
||||
def resize_image(image_path):
|
||||
image = Image.open(image_path).convert('RGBA')
|
||||
image = remove_white_border(image)
|
||||
return image.resize(RESIZE_TO)
|
||||
|
||||
def main(json_file_path):
|
||||
# 确保使用完整路径
|
||||
json_file_path = os.path.join(ROOT_DIR, json_file_path)
|
||||
data = load_json(json_file_path)
|
||||
|
||||
new_data = {}
|
||||
|
||||
for folder_name, images in data.items():
|
||||
large_image = Image.new('RGBA', LARGE_IMAGE_SIZE, color=(0, 0, 0, 0))
|
||||
images_coordinates = {}
|
||||
index = 0
|
||||
|
||||
for image_name in images:
|
||||
if index >= IMAGE_COUNT:
|
||||
break
|
||||
# 图片位于子文件夹内
|
||||
img_path = os.path.join(ROOT_DIR, folder_name, image_name)
|
||||
img = resize_image(img_path)
|
||||
x = (index % 8) * RESIZE_TO[0]
|
||||
y = (index // 8) * RESIZE_TO[1]
|
||||
large_image.paste(img, (x, y))
|
||||
images_coordinates[image_name] = {'x': x, 'y': y}
|
||||
index += 1
|
||||
|
||||
output_image_path = os.path.join(ROOT_DIR, folder_name, f"{folder_name}ex.png")
|
||||
large_image.save(output_image_path, format='png')
|
||||
|
||||
# 将坐标信息直接保存到new_data字典中
|
||||
new_data[folder_name] = images_coordinates
|
||||
|
||||
# 输出新的json文件
|
||||
output_json_path = os.path.join(ROOT_DIR, 'motion_data_ex.json')
|
||||
with open(output_json_path, 'w') as outfile:
|
||||
json.dump(new_data, outfile, indent=4)
|
||||
|
||||
# 使用示例
|
||||
main('motion_data.json')
|
||||
Reference in New Issue
Block a user