如何从数组抽取随机字符串传入PIL文本函数并同步用于元数据
实现代码
你只需要在遍历生成图片的阶段,取出all_images里提前存储的随机字符串替换文本占位符,同时将字符串写入图片的info元数据字段即可,原有的元数据文件写入逻辑无需修改:
import random from PIL import Image, ImageDraw, ImageFont # 你原有配置保持不变 soft_skill = [] # 你的100个字符串数组 TOTAL_IMAGES = 你要生成的图片总数 myFont = ImageFont.truetype("你的字体文件路径.ttf", 字号) all_images = [] def create_new_image(): new_image = {} new_image["soft_skill"] = random.choices(soft_skill)[0] if new_image in all_images: return create_new_image() else: return new_image # 生成唯一属性组合逻辑不变 for i in range(TOTAL_IMAGES): new_trait_image = create_new_image() all_images.append(new_trait_image) # 新增图片生成+写文字+存元数据逻辑 for index, image_trait in enumerate(all_images): # 初始化你的基础PNG图片,用现有底图就替换为Image.open("底图路径.png") img = Image.new("RGBA", (图片宽度, 图片高度), (背景色R, 背景色G, 背景色B, 背景透明度)) draw = ImageDraw.Draw(img) # 取出当前抽中的字符串替换占位符 selected_soft_skill = image_trait["soft_skill"] draw.text((88,912), selected_soft_skill, font=myFont, fill = (0,255,10)) # 将字符串写入图片元数据,不覆盖原有元数据 img.info["soft_skill"] = selected_soft_skill # 保存图片时传入pnginfo参数保留自定义元数据 img.save(f"./输出目录/图片_{index}.png", pnginfo=img.info) # 你原有写入元数据文件的逻辑直接复用all_images数组即可,无需修改
注意事项
- 每次生成新图片时必须重新初始化
img和ImageDraw实例,避免多张图的文字叠加到同一张画布上 - PNG格式原生支持自定义元数据字段,保存时传入
pnginfo=img.info参数即可永久保留写入的字符串信息 - 原有生成元数据文件的逻辑不需要调整,
all_images数组已经存储了所有随机抽取的字符串,直接遍历该数组写入即可
内容的提问来源于stack exchange,提问作者Tyrell Broughton
相关产品推荐
相关产品推荐

