import os
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
# 假设每个类别的文件夹都放在'path_to_dataset'目录下
path_to_dataset = '../dataset/C_img'
# 每行展示的图片数量
images_per_row = 6
# 图片之间的间隔
spacing = 10
# 设置统一的图片大小
standard_size = (256, 256) # 假设统一尺寸为100x100像素
# 字体大小
font_size = 60
# 字体路径
font_path = "SimHei.ttf"
img_save_path = 'img.png'
# 初始化图片列表,用于存储每个类别的图片
images_list = []
categorys = os.listdir(path_to_dataset)
# 遍历每个类别文件夹
for category in categorys[:6]:
category_path = os.path.join(path_to_dataset, category)
if os.path.isdir(category_path):
# 获取该类别下的图片文件列表
images = [f for f in os.listdir(category_path) if os.path.isfile(os.path.join(category_path, f))]
# 只取前6张图片
images = images[:images_per_row]
# 打开图片,调整大小,并添加到列表
images_in_category = []
for img_name in images:
img_path = os.path.join(category_path, img_name)
img = Image.open(img_path)
img = img.resize(standard_size) # 调整图片大小
images_in_category.append(img)
images_list.append((category, images_in_category))
# 计算输出图片的尺寸
if images_list:
# 加载字体
font = ImageFont.truetype(font_path, font_size)
# 计算最大的图片数量
max_images_in_category = max(len(images) for _, images in images_list)
# 使用 getbbox 替代 getsize
text_width = max(ImageFont.truetype(font_path, font_size).getbbox(category)[2] for category, _ in images_list)
total_width = (max_images_in_category * (standard_size[0] + spacing)) + text_width + 2*spacing
total_height = (len(images_list) * (standard_size[1] + spacing)) - spacing + 2 * spacing # 添加2*spacing用于上下边界
# 创建一个新的空白图片,用于拼接
result_image = Image.new('RGB', (total_width, total_height), (255, 255, 255))
# 将每个类别的图片拼接到结果图片上,并在图片左边添加类别名称
y_offset = spacing
for category, images_in_category in images_list:
draw = ImageDraw.Draw(result_image)
# 使用 textbbox 替代 textsize
bbox = draw.textbbox((0, 0), category, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
# 为文字预留额外的4个字符空间
average_char_width = text_width / len(category)
additional_space = average_char_width * 0.3
text_width += additional_space
draw.text((0, y_offset + (standard_size[1] - text_height) // 2), category, font=font, fill=(0, 0, 0))
# 添加图片,确保 x_offset 为整数
x_offset = int(text_width + spacing)
for img in images_in_category:
result_image.paste(img, (x_offset, y_offset))
x_offset += standard_size[0] + spacing
y_offset += standard_size[1] + spacing
# 显示结果图片
result_image.save(img_save_path)
result_image.show()
else:
print("No images found in the dataset.")
论文中数据集展示代码
最新推荐文章于 2024-09-30 14:16:32 发布