def startswitch(): global font_size,line_spacing,word_spacing,line_spacing_sigma,font_size_sigma,perturb_y_sigma, perturb_x_sigma_show,perturb_theta_sigma template = Template( background=Image.new(mode="1", size=(2479, 3508), color=1), font_size=font_size, line_spacing=line_spacing, # 行间距 word_spacing=word_spacing, # 字间距 line_spacing_sigma=line_spacing_sigma, # 行间距随机扰动 word_spacing_sigma=word_spacing_sigma, # 字间距随机扰动 font_size_sigma=font_size_sigma, # 字体大小随机扰动 perturb_theta_sigma=perturb_theta_sigma, # 笔画旋转偏移随机扰动 perturb_x_sigma=perturb_x_sigma, # 笔画横向偏移随机扰动 perturb_y_sigma=perturb_y_sigma, # 笔画纵向偏移随机扰动 font=ImageFont.truetype(afont), ) if font_size > line_spacing: tkinter.messagebox.showwarning(title = "stupid" , message = "字体大小必须小于行间距,你以为?") else: with open(path, "r", encoding='UTF-8') as f: text = f.read() images = handwrite(text, template) for i, im in enumerate(images): assert isinstance(im, Image.Image) isExists = os.path.exists("images") if not isExists: os.mkdir("images") im.show() n = random.random() im.save("images/{}.jpg".format(n)) os.system("start explorer images")
def function(txt_path,font_path,prefix): path_0 = os.path.split(os.path.realpath(__file__))[0] path_0 = path.replace("\\", "/") + "/" strs = read_txt(txt_path).replace("。"," ").\ replace(","," ").replace(";"," ").replace(":",":").\ replace(";"," ").replace("• ","").replace("➢"," ").replace("◼","") template = Template( background=Image.new(mode="1", size=(9060, 12793), color=1), font_size=280, font=ImageFont.truetype(font_path), line_spacing=385, fill=0, # 字体“颜色” left_margin=0, top_margin=850, right_margin=0, bottom_margin=500, word_spacing=15, line_spacing_sigma=0, # 行间距随机扰动 end_chars=",。", # 防止特定字符因排版算法的自动换行而出现在行首 font_size_sigma=10, # 字体大小随机扰动 word_spacing_sigma=30, # 字间距随机扰动 ) images = handwrite(strs, template) for i, im in enumerate(images): assert isinstance(im, Image.Image) # im.show() im.save("cache/{}.png".format(i)) temp = prefix + "({}).png".format(i + 1) blend_two_images(path_0 + "cache/{}.png".format(i), path_0 + "backgrounds/background.png", path_0 + "png_outcome/" + temp) reduce_resolution(path_0 + "png_outcome/" + temp,4.152153987167736) clear_cache()
def transform(file, text, flag, font_size, line_spacing, left_margin, top_margin, right_margin, bottom_margin): im = Image.open(BytesIO(file)) if flag: im = im.transpose(Image.TRANSPOSE) template = Template( background=im, font_size=font_size, font=ImageFont.truetype("image/font/陈静的字.ttf"), line_spacing=line_spacing, fill=1, # 字体“颜色” left_margin=left_margin, top_margin=top_margin, right_margin=right_margin, bottom_margin=bottom_margin, word_spacing=1, line_spacing_sigma=3, # 行间距随机扰动 font_size_sigma=2, # 字体大小随机扰动 word_spacing_sigma=5, # 字间距随机扰动 end_chars=",。", # 防止特定字符因排版算法的自动换行而出现在行首 perturb_x_sigma=2, # 笔画横向偏移随机扰动 perturb_y_sigma=2, # 笔画纵向偏移随机扰动 perturb_theta_sigma=0.05, # 笔画旋转偏移随机扰动 ) images = handwrite(text, template) image = [] for i, im in enumerate(images): assert isinstance(im, Image.Image) # im.show() im.save('image/test/{}.jpg'.format(i))
def nb(text, size, han): template = Template(background=Image.new(mode="1", size=(1024, 2048), color=1), font_size=size, font=ImageFont.truetype("中国式手写风字体.ttf"), word_spacing=han) images = handwrite(text, template) index = int(0) for im in images: assert isinstance(im, Image.Image) strr = "save" + str(index) + ".png" im.save(strr, "PNG") index = index + 1
def run(self): self.signal.emit('开始生成图片\n\n') try: images = handwrite(self.text, self.template) for i, im in enumerate(images): assert isinstance(im, Image.Image) self.signal.emit('第 %s 张图片生成\n\n' % str(int(i) + 1)) if self.showImage == True: im.show() outputDir = self.outputPath.replace('\\', '/') im.save(outputDir + "/{}.webp".replace('//', '/').format(i)) self.signal.emit('所有图片生成完毕,输出文件夹为:%s\n\n' % outputDir) except Exception as e: self.signal.emit('出错了,报错信息如下:\n\n') self.signal.emit(str(e) + '\n\n')
def convert(text, font, path): template = Template( background=Image.new(mode='1', size=(900, 1000), color=1), font_size=96, font=ImageFont.truetype(font), line_spacing=120, fill=0, left_margin=100, top_margin=100, right_margin=100, bottom_margin=100, word_spacing=12, line_spacing_sigma=4, font_size_sigma=12, word_spacing_sigma=3, perturb_x_sigma=4, perturb_y_sigma=4, perturb_theta_sigma=0.05, ) images = handwrite(text, template) for _, im in enumerate(images): im.save(path)
from PIL import Image, ImageFont from handright import Template, handwrite text = "我能吞下玻璃而不伤身体。" template = Template( background=Image.new(mode="1", size=(1024, 2048), color=1), font_size=100, font=ImageFont.truetype("path/to/my/font.ttf"), ) for image in handwrite(text, template): image.show()
from PIL import Image, ImageFont from handright import Template, handwrite if __name__ == '__main__': size = 120 with open('text.txt', encoding='utf8') as f: text = f.read() template = Template( background=Image.open(r'bg.png'), font_size=size, font=ImageFont.truetype(r"hxk2.ttf"), line_spacing=int(1.5 * size), fill=0, left_margin=int(0.5 * size), top_margin=int(size * 1.2), right_margin=int(0.5 * size), bottom_margin=int(size * 1.2), word_spacing=0, line_spacing_sigma=0.06 * size, font_size_sigma=0.05 * size, word_spacing_sigma=0.03 * size, end_chars=',.?!,。?!、‘“;:', perturb_x_sigma=0.02 * size, perturb_y_sigma=0.02 * size, perturb_theta_sigma=0.0005 * size, ) with Pool() as p: images = handwrite(text, template, mapper=p.map) for i, im in enumerate(images): im.save("output/{}.jpg".format(i))
print("text.txt无内容,请将要手写的内容写入text.txt并保!存!") print("请自行关闭退出") counter = 1 while counter <= 10: counter = counter + 1 counter = counter - 1 else: template = Template( background=Image.new(mode="1", size=(3000, 4243), color=1), font_size=100, font=ImageFont.truetype("handwrite.ttf"), line_spacing=110, fill=0, # 字体“颜色” left_margin=100, top_margin=100, right_margin=100, bottom_margin=100, word_spacing=-15, line_spacing_sigma=2, # 行间距随机扰动 font_size_sigma=2, # 字体大小随机扰动 word_spacing_sigma=2, # 字间距随机扰动 end_chars=",。.,abcdefghigklmnopqrstuvwxyz", # 防止特定字符因排版算法的自动换行而出现在行首 perturb_x_sigma=2, # 笔画横向偏移随机扰动 perturb_y_sigma=2, # 笔画纵向偏移随机扰动 perturb_theta_sigma=0.05, # 笔画旋转偏移随机扰动 ) images = handwrite(text, template) for i, im in enumerate(images): assert isinstance(im, Image.Image) im.show() im.save("{}.png".format(i))
template = Template( background=background_temp, font=ImageFont.truetype(configuration_dict['font_file_path']), fill=ImageColor.getrgb(configuration_dict['font_color']), font_size=configuration_dict['font_size'], font_size_sigma=configuration_dict['font_size_sigma'], perturb_x_sigma=configuration_dict['perturb_x_sigma'], perturb_y_sigma=configuration_dict['perturb_y_sigma'], perturb_theta_sigma=configuration_dict['perturb_theta_sigma'], line_spacing=configuration_dict['line_spacing'], line_spacing_sigma=configuration_dict['line_spacing_sigma'], word_spacing=configuration_dict['word_spacing'], word_spacing_sigma=configuration_dict['word_spacing_sigma'], left_margin=configuration_dict['left_margin'], top_margin=configuration_dict['top_margin'], right_margin=configuration_dict['right_margin'], bottom_margin=configuration_dict['bottom_margin'], end_chars=configuration_dict['end_chars']) else: print('Configuration file "' + sys.argv[1] + '" not found!', usage) sys.exit() with Pool() as p: images = handwrite(open(text_file_path, mode='r', encoding='utf-8').read(), template, mapper=p.map) for i, im in enumerate(images): assert isinstance(im, Image.Image) im.save((output_path + str(uuid.uuid4()) + ".webp").format(i))