程序员的浪漫-用她的名字作画Python版

hello,大家好,我是一灰灰,之前介绍了一篇使用她的名字来画出她的美图的文章,其中主要使用的Java来实现的,今天呢,我们再来用Python来实现一下

同样最终的代码量也不会超过三十行

上篇博文超链:** 程序员的浪漫:用她的名字作画 Java版- 一灰灰Blog

1. 环境相关

这里我们选择python来作为我们的主要绘图武器,至于python的环境安装相关的这里就不介绍了,有兴趣的小伙伴自行探索

再python界,操作图片的利器PIL,相信大伙也都清楚,接下来将使用它来实现我们的目标

安装依赖

pip install Pillow

2. 基本知识点

再正式开始之前,给不太熟悉PIL操作的小伙伴,简单介绍一下它的基本用法,当然也会重点突出一下我们将采用的几个方法

2.1 加载图片

from PIL import Imageimg = Image.open("图片地址")

是的,就这么简单,直接使用 Image.open() 就可以读取图片了

2.2 图片基本信息获取

获取图之后,通常需要关注的几个参数,如宽高,通道

width, height = img.size
# RGBA 表示包含透明度,如png
# RGB 不包含透明度,如jpg
mode = img.mode

2.3 创建画板,用于编辑

如果我们想在这个图片上进行绘制信息,或者说希望创建一个空的画板,那么我们就先需要获取到一个ImageDraw对象

from PIL import ImageDraw# 获取图片对应的画板
draw = ImageDraw.Draw(img)

上面获取到draw对象之后,就可以根据它提供的各种方法,来绘制各种几何图形、文字、图片等;如果我们希望获取一个空的画板,可以怎么操作呢?


# 创建一个待透明度的图,第二个元组参数为图的宽高,第三个表示背景全透明
new_img = Image.new("RGBA", (width, height), (255, 255, 255, 0))

ImageDraw提供了很多绘图的方法,下面给出一些常用的case,就不重点叙述了

new_img = Image.new("RGBA", (480, 640), (255, 255, 255, 0))
# 创建绘制对象
draw = ImageDraw.Draw(new_img)# 从 (10, 10) -> (100, 100) 画一条黄色直线
draw.line((10, 10, 100, 100), 'red')# 绘制矩形 (100, 110) -> (200, 200),黑色填充,黄色填充
draw.rectangle((100, 110, 200, 200), 'black', 'red')# 绘制椭圆
draw.ellipse((300, 300, 500, 400), 'yellowgreen', 'red')
# 园
draw.ellipse((250, 250, 350, 350), 'seagreen', 'red')# 绘制文本,选择宋体,字体大小为28,uniquecode编码
font = ImageFont.truetype("simsun.ttc", 28, encoding="unic")
draw.text((300, 200), u'一灰灰Blog', 'red', font)

重点关注绘制文本这里,draw.text((x,y), "文字", "文字颜色", 字体), 这就是接下来要使用的方法

2.4 获取像素

如果我们希望获取指定坐标的RGB值,如下操作即可

pixel = img.getpixel((x, y))

看到这里的小伙伴,结合前一篇博文,要想实现python版的用她的名字绘图,相信就很简单了吧

2.5 预览和保存图片

# 展示图片
new_img.show()# 保存图片
new_img.save("save.png")

3. Python版文字绘图

接下来,进入正式的实现

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFontdef render(path: str, name: str, save: str):img = Image.open(path)width, height = img.size# 创建画板,放大24倍new_img = Image.new("RGBA", (width * 24, height * 24), (255, 255, 255, 0))draw = ImageDraw.Draw(new_img)# 加载自定义字体,字体文件来自 https://www.diyiziti.com/Builder/446font = ImageFont.truetype(u"D://MobileFile/潇洒手写体.ttf", 20, encoding="unic")  # 设置字体render_index = 0for x in range(width):for y in range(height):pixel = img.getpixel((x, y))draw.text((x * 24 + 2, y * 24 + 2), name[render_index], pixel, font)  # 再指定的地方使用文字替代之前的纯色render_index = (render_index + 1) % len(name)new_img.save(save)

依然以小黄人为例,来看下生成的效果如何

从上面的图片来看,和前面java版输出差不离,有兴趣的小伙伴动手搞起来吧;我是一灰灰,觉得不错的小伙伴给个收藏、点赞、评论支持一下呗

一灰灰的联系方式

尽信书则不如无书,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 个人站点:https://blog.hhui.top
  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840
  • 微信公众号:一灰灰blog

程序员的浪漫-用她的名字作画Python版相关推荐

  1. 程序员的浪漫:三十行代码实现用她的名字作幅画

    程序员的浪漫:三十行代码实现用她的名字作幅画 hello,各位小伙伴们大家好,看这篇文章的有很多新的朋友,有估计有不少的老朋友,首先做个自我介绍,我是一灰灰,码农界的资深搬运工:今天呢,没有站在我身边 ...

  2. python浪漫代码-使用Python代码的程序员也浪漫

    原标题:使用Python代码的程序员也浪漫 代码也浪漫:用Python放一场圣诞节烟花秀! 天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法 ...

  3. OSChina 情人节乱弹 ——我们程序员的浪漫

    2019独角兽企业重金招聘Python工程师标准>>> [今日歌曲] @n7then:明天就是情人节啦,向小小编辑投稿一曲. Say you won't go - James Art ...

  4. 程序员的浪漫,你值得拥有!

    作者 | 小游子: 来源 | CSDN 博客 今天我们就来盘点一下 GitHub 程序员开源的情人节表白的代码.来一睹大牛们是怎么过情人节的,是怎么跟自己的女朋友表白的?(文中图片均来自项目本身) 前 ...

  5. object转成实体对象_程序员的浪漫,new一个对象

    程序员都喜欢 面向对象编程,但如果你没有对象怎么办?当然是 new 一个对象出来. 面向对象编程 是一种程序设计思想,而不是真正的面向你的对象去编程.如果你真的这么做了,恭喜你获得:你爱我还是爱电脑? ...

  6. 她说程序员不懂浪漫,生日宴上惨变单身狗,其实,程序员的浪漫你不懂!

    css蛋糕 谁说程序员不懂得浪漫,只是程序员的浪漫你不懂!PS:人家都不懂,你再浪漫有啥用,最后还不是单身狗? 说实在的,以前也分享过一个程序员用纯CSS画的一个MAC,代码就三千多行,这个蛋糕虽然代 ...

  7. Java程序员情人节_盘点程序员情人节的表白,前端程序员最浪漫,后端不服来战...

    今天是 2 月 14 日情人节,我看公众号后台有好多人在回复关键字:情人节表白代码.我想,我作为大家的校长,必须给大家送一波福利代码啊!我是真没想到,竟然很多程序员都想用代码表白,还整的挺浪漫的,看来 ...

  8. 生日快乐程序员的浪漫代码_python告白代码,只属于程序员的浪漫

    不知何时,不知何因,程序员这个行业成为大家茶余饭后取乐的无辜群体.只要说到程序员,脑海中就浮现出刻板印象,标配穿搭:格子衫,牛仔裤,黑框眼镜.当然秃顶也是必须的,更狠的吐槽还有邋里邋遢,不懂浪漫,不知 ...

  9. c++获取子类窗口句柄位置_干货分享:用一百行代码做一个C/C++表白小程序,程序员的浪漫!...

    前言:很多时候,当别人听到你是程序员的时候.第一印象就是,格子衫.不浪漫.直男.但是程序员一旦浪漫起来,真的没其他人什么事了.什么纪念日,生日,情人节,礼物怎么送? 做一个浪漫的程序给她,放上你们照片 ...

最新文章

  1. memcache php mysql_PHP中的数据库二、memcache
  2. 动漫风格迁移 AnimeGANv2 ,发布线上运行 Demo
  3. 最新开源Faster-LIO:快速激光IMU里程计
  4. Linux的shell scripts的shell脚本练习
  5. Android 自动生成表格
  6. 杜比收购低延迟流媒体平台Millicast
  7. 使用xrandr和cvt命令添加自定义的分辨率模式
  8. 推荐使用typora
  9. python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...
  10. Hadoop学习之yarn
  11. [数据库]-----mysql数据的冷热分离 第二版
  12. 如何设置mysql远程访问
  13. 原生js-Ajax jq-Ajax集结
  14. java多线程-生产者消费者模式
  15. Eclipse集成lombok插件 解决@Data标签get/set方法找不到异常
  16. python中yaml模块的使用_详解Python yaml模块
  17. 【写作技巧】毕业论文格式要求
  18. 云教务学校管理系统源码
  19. 模式化窗口问题![window.dialogArguments]
  20. 1.5 设置新建工作簿的默认属性 [原创Excel教程]

热门文章

  1. 撤回(撤消)已发送的QQ和163 电子邮件
  2. 分享一个程序猿的真实的爱情故事
  3. 疫情反复,声网如何助力青岛教育局保障线上教学体验?
  4. 关于MATLAB license到期的解决办法
  5. 企微小裂变与企鲸客scrm的功能差异化
  6. iPhone SE不会淡出视野:苹果还需要它
  7. 修改qq服务器时间限制,为什麼QQ改不了密码?他显示请在常用IP上修改密码但我试过下Q改时间再改了还是不行...
  8. DOS命令--隐藏命令
  9. 荐读 | 数据共享与隐私矛盾:技术未满,向现实妥协
  10. 针对Office2013专业版,光标乱跳的问题 的解决