让PIL生成的字带有描边效果
来源:互联网 发布:java redis lua 编辑:程序博客网 时间:2024/05/02 02:19
Python里最著名的图像处理库当然是PIL(Python Image Library)。相对于ImageMagick,PIL更加简洁,并且拥有还算良好的文档。这是一篇介绍如何在PIL中对字体描边的文章,源于我一次真实的需求解决过程。
我们知道,在PIL中,我们只要使用ImageDraw的text方法就可以在一个Image对象上的指定位置写下字。现在我希望写出的字带有描边效果,仔细研究ImageDraw的文档后,我发现text方法有一个名为“outline”的参数。从字面上来看,“outline”就是边线的意思,但是当我将其加入到text方法的实参中,Python告诉我text方法没有outline这个参数。具体原因我也不清楚,不过看来此路是不通了。
于是继续去请教谷歌大神,功夫不负有心人,在Python的Mail List上,有人问出了同样的问题,并且得到了大神的解答,我按照大神给出的代码照葫芦画瓢,写了一个可以画出描边字的函数“mytext”,相关代码如下:
def mytext(self, pos, text, font, fill, border='black', bp=1): x, y = pos shadowcolor = border self.draw.text((x-bp, y), text, font=font, fill=shadowcolor) self.draw.text((x+bp, y), text, font=font, fill=shadowcolor) self.draw.text((x, y-bp), text, font=font, fill=shadowcolor) self.draw.text((x, y+bp), text, font=font, fill=shadowcolor) # thicker border self.draw.text((x-bp, y-bp), text, font=font, fill=shadowcolor) self.draw.text((x+bp, y-bp), text, font=font, fill=shadowcolor) self.draw.text((x-bp, y+bp), text, font=font, fill=shadowcolor) self.draw.text((x+bp, y+bp), text, font=font, fill=shadowcolor) # now draw the text over it self.draw.text((x, y), text, font=font, fill=fill)
请注意mytext是一个类方法,使用前确保self.dwaw是一个可用的ImageDraw实例。
相关参数中,border指的是描边的颜色,可以使用内置字符串或者RGB元组。bp则是描边的宽度,单位为像素。
以上方法在实际使用中令人满意,唯一的坏处就是由于为了画出边框调用了8次额外的text方法,可能会影响到图片生成效率,请自行斟酌、测试。
http://www.idndx.com/posts/python-pil-draw-text-with-stroke.html
- 让PIL生成的字带有描边效果
- python-PIL 画出带有角度的椭圆
- firefox扩展Tilt-让浏览的网页带有3D效果
- 带有震动效果的 ShakingAlertView
- 带有滚动效果的ViewPager
- 带有动画效果的tabbar
- 带有重叠布局的效果
- anime.js 实战:实现一个带有描边动画效果的复选框
- 生成带有参数的二维码
- 生成带有参数的二维码
- Python PIL图像处理-----图像的手绘效果
- 让Git的输出结果带有颜色
- 带有动画效果的Gallery控件
- js带有介绍的导航栏效果
- SVG 带有过渡效果的按钮
- iOS 带有震荡效果的动画
- 带有边框效果的图片裁剪
- 带有过渡效果的搜索框
- MySQl心得4--3--数据库查询3--from字句
- 宏基,华硕,东芝发布Win 8平板抗衡iPad
- MySQl心得4--4--数据库查询4--子查询
- Win7移动用户文件夹的一个简便方法
- Daily used tables, views in ORACLE SQL
- 让PIL生成的字带有描边效果
- ナンパと愿望作者木易瑩玉
- C++程序中抛出异常后对象的析构顺序
- 征服 Apache + SVN
- Oracle Core 学习笔记一 -- Redo 和 Undo 机制详解
- 移动广告平台列举
- 织梦图片调用
- C++字符串流
- Just to do!!!Just to do!!!