需要进行多个相机拼图,拼图方法采用相机位置和相机生成图片的编号,进行拼接。改代码用于生成小图,便于前端工程师进行拼图测试
from PIL import Image, ImageDraw, ImageFont
# 定义原图的尺寸
width = 328
height = 1000
# 定义分割的份数
x_parts = 4
y_parts = 30
# 计算每个小图片的尺寸
part_width = width // x_parts
part_height = height // y_parts
# 创建一个灰色的大图
image = Image.new('RGB', (width, height), color='gray')
draw = ImageDraw.Draw(image)
image.save('full_image_1chanel.jpeg',format='JPEG', quality=20)
image.save('output_jp2.jp2', format='JPEG2000')
# 设置字体(需要系统支持字体文件)
try:
font = ImageFont.truetype("arial.ttf", 10) # 使用Arial字体,字号为10
except IOError:
font = ImageFont.load_default() # 如果系统没有Arial字体,使用默认字体
# 保存每个小图片
for i in range(x_parts):
for j in range(y_parts):
# 计算小图片的边界
left = i * part_width
upper = j * part_height
right = left + part_width
lower = upper + part_height
# 计算小图片中心的坐标
center_x = left + part_width // 2
center_y = upper + part_height // 2
# 在小图片中心绘制坐标文字
text = f"({i},{j})"
# 使用 getbbox 计算文本的尺寸
text_bbox = font.getbbox(text)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
text_position = (center_x - text_width // 2, center_y - text_height // 2)
draw.text(text_position, text, fill="white", font=font)
# 裁剪小图片
part_image = image.crop((left, upper, right, lower))
# 保存小图片,文件名包含坐标
part_image.save(f'HY00001_123456789012345_{i}_{j}.png')
# 保存完整的大图(可选)
gray_image = image.convert('L') //单通道PNG
gray_image.save('full_image_1chanel.png')
print("图片分割完成,每个小图片已保存。")