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

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

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

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

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

1. 环境相关

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

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

安装依赖

pip install Pillow

2. 基本知识点

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

2.1 加载图片

from PIL import Image

img = 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 ImageFont

def 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/446
    font = ImageFont.truetype(u"D://MobileFile/潇洒手写体.ttf", 20, encoding="unic")  # 设置字体
    render_index = 0
    for 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)

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

image.png

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

一灰灰的联系方式

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 144,481评论 1 305
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,908评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,710评论 0 214
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,372评论 0 183
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 49,216评论 1 262
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,949评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,558评论 2 275
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,308评论 0 168
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,183评论 7 237
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,675评论 0 214
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,416评论 2 217
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,757评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,314评论 1 33
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,215评论 2 213
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,682评论 3 214
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,665评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,091评论 0 170
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,687评论 2 233
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,830评论 2 237

推荐阅读更多精彩内容