Closed YYTB closed 6 years ago
谢谢你的建议!
首先非常感谢耐心答复!开源万岁!
其实在现在的版本中已经使用了你所说的算法,同一个字其实不一样的。有相关参数可以调节
具体指的是什么参数,在API文档中吗?好像没有看到。我之前还在想把每一个字随机调用不同字体呢,不过想起来要算每一个字的坐标,哪怕只是加减法也实在太繁琐了点。
其实主要是被单位形式主义的会议记录折腾烦了,想趁着假期找一个方便应付的法子。
今天折腾了一天,本来以为基本成功,结果最后发现总是有一个列表索引溢出的问题,百思不得其解。
想来想去,最后才想起来我使用的背景图像是分奇偶页的(市面上的会议记录本大都分奇偶页,奇数页顶上有一些固定的会议时间、会议地点之类的栏目,偶数页没有,结果就是页面的正文容量不一样),而在代码我用for num in range(0, len(images))循环输出效果图,但是每当背景图切换时,len(images)就会因为奇偶数页容纳的内容不一样而变动,最终导致报错。
后来我又想,是不是可以干脆把range的范围适当扩大,然后忽略溢出的错误呢?反正只要把有内容的图片生成了就行。也是行不通的,因为奇数页和偶数页由于基于排版的背景图片不一样,造成正文内容无法接续。
我实在想不到办法解决这个问题,我觉得起码得判断奇数页断在哪一个字,后续偶数页又断在哪一个字才能有效解决。您认为呢?
太复杂的话只好自己重新设计一种奇偶页背景完全一样的会议记录了。反正都是形式主义。所以这个问题没空解答就算了哈。
太啰嗦了,不知有没有描述清楚,还是贴一下代码,见笑:(首页也就是第0页没有贴,因为生成的东西太多了,贴上来太杂乱)
###生成后续页
print('正在生生后续页……')
even = dict(
background=Image.open("./background/even.png"),
box=(382, 1218, 2132, 2992),
font=ziti,
font_size=110,
line_spacing=8,
word_spacing=-3,
font_size_sigma=5,
word_spacing_sigma=1,
line_spacing_sigma=5
)
images = handwrite(TEXT, even)
print('总共图像页码:' + str(len(images)))
if len(images) == 1:
pass
else:
for num in range(1, len(images)):
if (num % 2) == 0 :
print('正在生成第' + str(num) + '页')
images = handwrite(TEXT, even)
savefile = './out/record' + str(num) + '.png'
#print(savefile)
images[num].save(savefile)
print('已生成第' + str(num) + '页:' + savefile)
else:
print('正在生成第' + str(num) + '页')
odd = dict(
background=Image.open("./background/odd.png"),
box=(382, 532, 2132, 2992),
font=ziti,
font_size=110,
line_spacing=8,
word_spacing=-3,
font_size_sigma=5,
word_spacing_sigma=1,
line_spacing_sigma=5
)
images = handwrite(TEXT, odd)
savefile = './out/record' + str(num) + '.png'
#print(savefile)
images[num].save(savefile)
print('已生成第' + str(num) + '页:' + savefile)
非常感谢你提的宝贵建议!
对于涂改这个问题,我推荐目前最好的方式是在打印的结果上做人工修改。至于加入涂改功能,首先每个人的涂改方式不一样;其次如果是自动化涂改的话,可能涉及语义分析,如果是人工标记涂改位置,就需使用标记语言(创建一种或使用已存在的)而不仅仅是纯文本(plain text)。这个问题我要看其他用户的反馈,以此做出是否加入此功能的决定。
alpha
参数就是用于使同一个字不一样的。
这个建议非常宝贵。我会在后续版本(可能在v2.0,也可能在v1.x,主要出于接口后向兼容性的考虑)中加入“周期性模板”(其中具体的细节我们可以深入讨论)的。目前而言,我有一权宜之计,以一个白色且alpha通道为0的图为背景输入handwrite
,然后将所要的背景图与生成图片合并。假如你写不出来,联系我,我可以帮你写一份示例代码;如果你写出来了,欢迎为本项目写一份示例代码,放在example
文件夹中并发出pull request
。
(下次请记得给issue打上label,如果是不同的主题应该分成几个issue)
昨天尽折腾网络了,我想你明白的。
我不太理解意思,不知道这个alpha通道为0的图片是自己用图片软件做好还是调用Image,如果是后者的话还没有研究过。
如果这样做的话,后面是不是又涉及到裁剪粘贴?这也有些麻烦,因为算裁剪面积又够呛,而且我在参数中普遍设置了一定的行距抖动,万一没算好裁剪面积,搞不好就把剪刀下在了某行文字的中间。
我打包了背景图发你gmail,如果真的有空写,第0页顶上的那些会议时间、主持人、记录人之类的信息就不用写了,省得麻烦。代码就没上,别辣你的眼睛,搅乱了你的思路,哈哈。
此致,新春快乐。
新春快乐! 不好意思上次我没有考虑清楚,你奇偶页换的不仅仅是背景还有box参数,这个通过后期合并图片是无法解决的。 我已经决定在下一个版本v1.1.x加入此功能。
我先做个小调查: 你觉得在奇偶页更换时除了背景图和box参数改动外还会修改哪些参数?
looking forward to it!
除了背景图和box我也暂时没想到有其他需要改的参数。本来我想说奇数偶数页的页码都在外侧,但是其实也是跟box有关。背景图其实也无所谓,大不了判断一下奇偶数。
另外,可否把Return这个API也示范一下,感觉放着现成的API不用,反而用for num in range(0, len(images))
来循环存储绘图会不会有点傻
顺便也建议如能更新example,可否考虑使用尽可能多的参数,毕竟对我这种初学者来说做减法要比加法简单一些。
最后,建议box的坐标也能够加入一定的高斯分布,毕竟如果是人写字的话不会总从一张纸的同一个位置写起。当然,这个没有API的话用random.randint
也行。
页码这东西人工手写就好了,也没多少。当然了你也可以在生成的图片上调用Pillow(本库目前基于此库开发)的API来写上页码。
返回值类型是list,如何遍历list我觉得任何一个Python入门教程都会提。
谢谢你的建议,我以后多用参数。
box不能随机化,否则会整体平移的。另外box仅仅是限定所写内容每一个字平均位置的范围,每个字的具体位置会在平均位置的基础上随机化。
is_end_char和is_half_char是要把函数作为实参传进去的,要是你不了解的话就用默认值吧。
这个feature我已经实现得差不多了。
现在有一个问题:奇偶页的背景图片的大小size
不一定是相同的。你觉得需要自动把背景图的大小调整到一致size
的功能吗?
Feature
本人门外汉,正在努力入门python,提几条不成熟的建议