GithubHelp home page GithubHelp logo

功能建议 about handright HOT 9 CLOSED

gsllchb avatar gsllchb commented on May 12, 2024 1
功能建议

from handright.

Comments (9)

Gsllchb avatar Gsllchb commented on May 12, 2024

谢谢你的建议!

  1. 其实在现在的版本中已经使用了你所说的算法,同一个字其实不一样的。有相关参数可以调节,在使用默认参数下,我选择了保守的策略,即模拟一个字体非常工整的人的认真书写。
  2. 我觉得在输入的字符串中就应该会人为的(无论是故意还是无意)含有错别字。至于对人书写错误进行模拟方面的功能,我会认真考虑的。
  3. 实现输出PDF有两种方式:
    • 最简单的就是直接将生成图片粘贴到PDF中,这其实和几张图片文件没有本质区别;这种如果的确需要的话,我可以在后续版本中加入此功能。
    • 黑入字体,对字体做随机化修改,然后在随机化排版;这如你所说近乎完全重构,而且其中一些问题非常棘手;这个我会考虑,但是近期不会考虑。

from handright.

YYTB avatar YYTB commented on May 12, 2024

奇偶页使用不同背景导致问题

首先非常感谢耐心答复!开源**!

先书接上回,之前可能有些没表达清楚。

  • 错别字我说的是您第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.

Gsllchb avatar Gsllchb commented on May 12, 2024

非常感谢你提的宝贵建议!

  1. 对于涂改这个问题,我推荐目前最好的方式是在打印的结果上做人工修改。至于加入涂改功能,首先每个人的涂改方式不一样;其次如果是自动化涂改的话,可能涉及语义分析,如果是人工标记涂改位置,就需使用标记语言(创建一种或使用已存在的)而不仅仅是纯文本(plain text)。这个问题我要看其他用户的反馈,以此做出是否加入此功能的决定。

  2. alpha参数就是用于使同一个字不一样的。

  3. 这个建议非常宝贵。我会在后续版本(可能在v2.0,也可能在v1.x,主要出于接口后向兼容性的考虑)中加入“周期性模板”(其中具体的细节我们可以深入讨论)的。目前而言,我有一权宜之计,以一个白色且alpha通道为0的图为背景输入handwrite,然后将所要的背景图与生成图片合并。假如你写不出来,联系我,我可以帮你写一份示例代码;如果你写出来了,欢迎为本项目写一份示例代码,放在example文件夹中并发出pull request

(下次请记得给issue打上label,如果是不同的主题应该分成几个issue)

from handright.

YYTB avatar YYTB commented on May 12, 2024

昨天尽折腾网络了,我想你明白的。

我不太理解意思,不知道这个alpha通道为0的图片是自己用图片软件做好还是调用Image,如果是后者的话还没有研究过。

如果这样做的话,后面是不是又涉及到裁剪粘贴?这也有些麻烦,因为算裁剪面积又够呛,而且我在参数中普遍设置了一定的行距抖动,万一没算好裁剪面积,搞不好就把剪刀下在了某行文字的中间。

我打包了背景图发你gmail,如果真的有空写,第0页顶上的那些会议时间、主持人、记录人之类的信息就不用写了,省得麻烦。代码就没上,别辣你的眼睛,搅乱了你的思路,哈哈。

此致,新春快乐。

from handright.

Gsllchb avatar Gsllchb commented on May 12, 2024

新春快乐!
不好意思上次我没有考虑清楚,你奇偶页换的不仅仅是背景还有box参数,这个通过后期合并图片是无法解决的。
我已经决定在下一个版本v1.1.x加入此功能。

我先做个小调查:
你觉得在奇偶页更换时除了背景图和box参数改动外还会修改哪些参数?

from handright.

YYTB avatar YYTB commented on May 12, 2024

looking forward to it!

除了背景图和box我也暂时没想到有其他需要改的参数。本来我想说奇数偶数页的页码都在外侧,但是其实也是跟box有关。背景图其实也无所谓,大不了判断一下奇偶数。

另外,可否把Return这个API也示范一下,感觉放着现成的API不用,反而用for num in range(0, len(images))来循环存储绘图会不会有点傻

顺便也建议如能更新example,可否考虑使用尽可能多的参数,毕竟对我这种初学者来说做减法要比加法简单一些。

最后,建议box的坐标也能够加入一定的高斯分布,毕竟如果是人写字的话不会总从一张纸的同一个位置写起。当然,这个没有API的话用random.randint也行。

from handright.

Gsllchb avatar Gsllchb commented on May 12, 2024
  1. 页码这东西人工手写就好了,也没多少。当然了你也可以在生成的图片上调用Pillow(本库目前基于此库开发)的API来写上页码。

  2. 返回值类型是list,如何遍历list我觉得任何一个Python入门教程都会提。

  3. 谢谢你的建议,我以后多用参数。

  4. box不能随机化,否则会整体平移的。另外box仅仅是限定所写内容每一个字平均位置的范围,每个字的具体位置会在平均位置的基础上随机化。

from handright.

Gsllchb avatar Gsllchb commented on May 12, 2024

from handright.

Gsllchb avatar Gsllchb commented on May 12, 2024

这个feature我已经实现得差不多了。
现在有一个问题:奇偶页的背景图片的大小size不一定是相同的。你觉得需要自动把背景图的大小调整到一致size的功能吗?

from handright.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.