Comments (9)
谢谢你的建议!
- 其实在现在的版本中已经使用了你所说的算法,同一个字其实不一样的。有相关参数可以调节,在使用默认参数下,我选择了保守的策略,即模拟一个字体非常工整的人的认真书写。
- 我觉得在输入的字符串中就应该会人为的(无论是故意还是无意)含有错别字。至于对人书写错误进行模拟方面的功能,我会认真考虑的。
- 实现输出PDF有两种方式:
- 最简单的就是直接将生成图片粘贴到PDF中,这其实和几张图片文件没有本质区别;这种如果的确需要的话,我可以在后续版本中加入此功能。
- 黑入字体,对字体做随机化修改,然后在随机化排版;这如你所说近乎完全重构,而且其中一些问题非常棘手;这个我会考虑,但是近期不会考虑。
from handright.
奇偶页使用不同背景导致问题
首先非常感谢耐心答复!开源**!
先书接上回,之前可能有些没表达清楚。
- 错别字我说的是您第2种意思,就是有涂改痕迹的字。
- 输出pdf也是您说的第2中意思,是指矢量图形。
- 不知到所说的
其实在现在的版本中已经使用了你所说的算法,同一个字其实不一样的。有相关参数可以调节
具体指的是什么参数,在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)
from handright.
非常感谢你提的宝贵建议!
-
对于涂改这个问题,我推荐目前最好的方式是在打印的结果上做人工修改。至于加入涂改功能,首先每个人的涂改方式不一样;其次如果是自动化涂改的话,可能涉及语义分析,如果是人工标记涂改位置,就需使用标记语言(创建一种或使用已存在的)而不仅仅是纯文本(plain text)。这个问题我要看其他用户的反馈,以此做出是否加入此功能的决定。
-
alpha
参数就是用于使同一个字不一样的。 -
这个建议非常宝贵。我会在后续版本(可能在v2.0,也可能在v1.x,主要出于接口后向兼容性的考虑)中加入“周期性模板”(其中具体的细节我们可以深入讨论)的。目前而言,我有一权宜之计,以一个白色且alpha通道为0的图为背景输入
handwrite
,然后将所要的背景图与生成图片合并。假如你写不出来,联系我,我可以帮你写一份示例代码;如果你写出来了,欢迎为本项目写一份示例代码,放在example
文件夹中并发出pull request
。
(下次请记得给issue打上label,如果是不同的主题应该分成几个issue)
from handright.
昨天尽折腾网络了,我想你明白的。
我不太理解意思,不知道这个alpha通道为0的图片是自己用图片软件做好还是调用Image,如果是后者的话还没有研究过。
如果这样做的话,后面是不是又涉及到裁剪粘贴?这也有些麻烦,因为算裁剪面积又够呛,而且我在参数中普遍设置了一定的行距抖动,万一没算好裁剪面积,搞不好就把剪刀下在了某行文字的中间。
我打包了背景图发你gmail,如果真的有空写,第0页顶上的那些会议时间、主持人、记录人之类的信息就不用写了,省得麻烦。代码就没上,别辣你的眼睛,搅乱了你的思路,哈哈。
此致,新春快乐。
from handright.
新春快乐!
不好意思上次我没有考虑清楚,你奇偶页换的不仅仅是背景还有box参数,这个通过后期合并图片是无法解决的。
我已经决定在下一个版本v1.1.x加入此功能。
我先做个小调查:
你觉得在奇偶页更换时除了背景图和box参数改动外还会修改哪些参数?
from handright.
looking forward to it!
除了背景图和box我也暂时没想到有其他需要改的参数。本来我想说奇数偶数页的页码都在外侧,但是其实也是跟box有关。背景图其实也无所谓,大不了判断一下奇偶数。
另外,可否把Return这个API也示范一下,感觉放着现成的API不用,反而用for num in range(0, len(images))
来循环存储绘图会不会有点傻
顺便也建议如能更新example,可否考虑使用尽可能多的参数,毕竟对我这种初学者来说做减法要比加法简单一些。
最后,建议box的坐标也能够加入一定的高斯分布,毕竟如果是人写字的话不会总从一张纸的同一个位置写起。当然,这个没有API的话用random.randint
也行。
from handright.
-
页码这东西人工手写就好了,也没多少。当然了你也可以在生成的图片上调用Pillow(本库目前基于此库开发)的API来写上页码。
-
返回值类型是list,如何遍历list我觉得任何一个Python入门教程都会提。
-
谢谢你的建议,我以后多用参数。
-
box不能随机化,否则会整体平移的。另外box仅仅是限定所写内容每一个字平均位置的范围,每个字的具体位置会在平均位置的基础上随机化。
from handright.
from handright.
这个feature我已经实现得差不多了。
现在有一个问题:奇偶页的背景图片的大小size
不一定是相同的。你觉得需要自动把背景图的大小调整到一致size
的功能吗?
from handright.
Related Issues (20)
- 我做了个 GUI HOT 2
- 有人提出想加入分页符的支持 HOT 1
- 希望能够直接处理word文档,另外能不能导出无背景图片?要是pdf格式就更好了
- 能不能添加一个行角度随机调节的功能 HOT 1
- font 问题~ HOT 1
- 如何在不缩小字体的情况下使笔画变细 HOT 1
- 中文字符和英文字符宽度不一致问题 HOT 3
- 能增加多个字体随机分配这样的功能吗? HOT 1
- . HOT 1
- 部署问题 HOT 1
- 支持个人自建字体吗?
- 有没有做字库检查? HOT 4
- module 'handright' has no attribute 'TableWriter' HOT 1
- 建议引进抗锯齿算法 HOT 2
- 部分文字显示不出来 HOT 1
- 我做了网页版
- iOS手写模拟APP推荐
- 中文仿手写体
- AttributeError: 'FreeTypeFont' object has no attribute 'getsize' HOT 1
- 常规的字体,如黑体,宋体,等怎样模拟手写效果?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from handright.