【每周一坑】用代码给图片配上文字

我们的『每日一坑』栏目里都是一些练手的小题目,难度不高,适合新手用来熟悉编程。如果想要更复杂的大项目,可以上我们的实验室栏目 lab.crossincode.com 上查看,或者论坛 bbs.crossincode.com 上讨论。

本栏目的往期题目有不少都是数学计算相关的,今天有点不一样,我们来尝试一个图像处理的问题:

在图片上添加文字

效果示例 原图1

效果图1

原图2

效果图2

这个功能有不少实用场景。比如我们经常看到朋友圈的一些个性化海报,上面有你的昵称、头像、分数、留言……都可以通过类似方法实现。而图像处理本身也是 Python 重要应用方向之一。

提示:可以使用 PIL 库(推荐)或 OpenCV 库实现此功能。通过网络搜索,你一定可以找到不少示例代码。

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.comcodeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。

【解答】替换文件中的敏感信息

上期的题目相对比较简单,只要熟悉正则表达式就可以很轻松搞定。(所以你们都觉得很简单而不写了么)

不算太严格的匹配:

手机号:1\d{10} 身份证号:\d{18}|\d{17}[xX]

给出 @ChrisYOUNG 同学的代码作为参考:

import re
def remove(data, i, line, regex, left, right):
    m = re.search(regex, line)
    if m:
        digits = m.group(0)
        start, end = m.start(0), m.end(0)
        data[i] = line[:start+left] + '*' * (right-left+1) + line[start+right+1:]
        return True
    return False

infile = 'data.txt'
outfile = 'data_proc.txt'
with open(infile) as fr:
    data = fr.readlines()

regex_id = '(\d{18}|\d{17}X)'
regex_phone = '1\d{10}'
for i, line in enumerate(data):
    status = remove(data, i, line, regex_id, 5, 14)
    if not status:
        status = remove(data, i, line, regex_phone, 3, 6)

with open(outfile, 'w') as fw:
    for line in data:
        fw.write(line)

@阳光海岸 同学也提交了解答,不过方法还需改进。

感谢大家的积极参与!期待在下一期中看到你的代码!

  • 欢迎在论坛 bbs.crossincode.com 上对代码做进一步讨论。
  • 也别忘了将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2018-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

程序员之痛点:取个好名字

20930
来自专栏海说

[转]程序员你为什么这么累?

大家一提到程序员,首先想到的是以下标签:苦逼,加班,熬夜通宵。但是,但凡工作了的同学都知道,其实大部分程序员做的事情都很简单,代码CRUD可以说毫无技术含量,就...

11120
来自专栏王清培的专栏

.NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

阅读目录: 1.开篇介绍 2.迭代测试、重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 ...

21090
来自专栏程序人生 阅读快乐

Linux Shell编程与编辑器使用详解

本书由浅入深,全面、系统地介绍了Linux技术,书中提供了大量实例,供读者实战演练。另外,本书有很多关于Linux下的命令操作内容,所以对于每个命令、每个管理设...

12610
来自专栏java思维导图

程序员,请优先提高代码的可读性

现在,当有人提及“优化”一词时,他们通常是指“优化执行时间”,除非他们明确表明要优化GPU的内存消耗,网络流量等等。

10640
来自专栏Golang语言社区

Go 的垃圾回收机制在实践中有哪些需要注意的地方?

之前回答问题的时候Go还处在1.1版本,到了1.2和1.3,Go的GC跟踪命令和GC内部实现已经有一些变化,并且根据评论中的反馈,这边一并做补充说明。 Go ...

53960
来自专栏ThoughtWorks

给Java程序员的Angular快速指南 | 洞见

Spring + Angular 的全栈式开发,生产力高、入门难度低(此处省略一万字),是 Java 程序员扩展技术栈的上佳选择。

13240
来自专栏ThoughtWorks

都100%代码覆盖了,还会有什么问题?

(图片来自:http://t.cn/R06rQHi) 引言 很多人看到这个标题时,都会想“你都100%代码覆盖了,怎么还会有问题呢?” 让我们看一下代码例子:...

39780
来自专栏PPV课数据科学社区

从 R 迁移到 Python 过程中你需要知道的几个软件库

为什么要用 Python 呢? 我喜欢用 Python 来处理机器学习问题的一个重要原因是 Python 吸取了 R 社区的优点,同时还将其进行了优化打包。我一...

32770
来自专栏技术翻译

Python逻辑编程实例

逻辑编程是一种编程范例,它将计算视为对事实和规则构成的知识数据库的自动推理。它是一种编程方式,基于形式逻辑。这种语言的程序是一组逻辑形式的句子,表达关于问题域的...

41030

扫码关注云+社区

领取腾讯云代金券