用她的名字画画程序员奇缘-用她的名字画出她的美图的Python版大家好,我是灰烬,之前介绍过一篇用她的名字画出她的美图的文章,主要是Java实现的,今天我们来用Python来实现同样的最终代码量不会超过30行上一篇博文超链接:*程序员的浪漫-Python版画她的名字-一辉辉博客1.环境相关这里我们选择python作为我们的主要绘图利器。至于python的环境安装,这里就不介绍了。有兴趣的朋友可以自己去探索python的世界,而PIL这个强大的图片操作工具,相信大家都知道我们会用到它来实现我们的目的。安装依赖于pipinstallPillow2。基础知识点我会重点介绍几种我们会采用的方法2.1从PIL加载图片importImageimg=Image.open("imageaddress")是的,就这么简单,直接用Image.open()读取图片就可以了2.2图片基础信息获取获取图片后,通常需要注意几个参数,比如宽高,通道宽度,height=img.size#RGBA表示包含透明度,比如png#RGB不包含透明度,比如jpgmode=img.mode2.3创建画板,用于编辑如果我们要在这张图片上绘制信息,或者想创建一个空的画板,那么我们首先需要从PIL中获取一个ImageDraw对象importImageDraw#获取对应的画板tothepicturedraw=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')#drawellipsedraw.ellipse((300,300,500,400),'yellowgreen','red')#gardendraw.ellipse((250,250,350,350),'seagreen','red')#绘制文字,选择宋体,字号为28,uniquecodeencodingfont=ImageFont.truetype("simsun.ttc",28,encoding="unic")draw.text((300,200),u'YihuihuiBlog','red',font)这里重点绘制文字,draw.text((x,y),"text","textcolor",font),这是下一步方法2.4获取像素如果我们想获取指定坐标的RGB值,可以这样做:pixel=img.getpixel((x,y))看到这里的朋友,结合之前的博文,如果我们想实现python版本我相信很简单用她的名字画。2.5预览并保存图片#显示图片new_img.show()#保存图片new_img.save("save.png")3.Python版文字绘制接下来进入官方实现fromPILimportImagefromPILimportImageDrawfromPILimportImageFontdefrender(path:str,name:str,save:str):img=Image.open(path)宽度,高度=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/handwriting.ttf",20,encoding="unic")#Settingsfontrender_index=0forxinrange(width):foryinrange(height):pixel=img.getpixel((x,y))draw.text((x*24+2,y*24+2),name[render_index],pixel,font)#在指定位置用文字替换之前的纯色效果如何从上图来看,和之前java版本的输出相差不远。如果您有兴趣,请自己动手做;相信一个灰色的联系方式,还不如没有书。以上内容纯属家庭意见。由于个人能力有限,难免会有疏漏和错误。如果发现bug或者有更好的建议,欢迎大家批评指正。个人感谢站点:https://blog.hhui.top微博地址:小灰灰博客QQ:Yihuihui/3302797840微信公众号:Yihuihui博客
