一、Pillow

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

安装Pillow

如果安装了Anaconda,Pillow就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install pillow

如果遇到Permission denied安装失败,请加上sudo重试。

操作图像

来看看最常见的图像缩放操作,只需三四行代码:

from PIL import Image# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')

其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。

比如,模糊效果也只需几行代码:

from PIL import Image, ImageFilter# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

效果如下:

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilterimport random# 随机字母:
def rndChar():return chr(random.randint(65, 90))# 随机颜色1:
def rndColor():return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 随机颜色2:
def rndColor2():return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):for y in range(height):draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

我们用随机颜色填充背景,再画上文字,最后对图像进行模糊,得到验证码图片如下:

如果运行的时候报错:

IOError: cannot open resource

这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:

'/Library/Fonts/Arial.ttf'

要详细了解PIL的强大功能,请请参考Pillow官方文档:

Pillow (PIL Fork) 9.2.0 documentation

总结:

PIL提供了操作图像的强大功能,可以通过简单的代码完成复杂的图像处理。

二、海龟绘图

在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。

海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。

我们来看一个指挥小海龟绘制一个长方形的简单代码:

# 导入turtle包的所有内容:
from turtle import *# 设置笔刷宽度:
width(4)# 前进:
forward(200)
# 右转90度:
right(90)# 笔刷颜色:
pencolor('red')
forward(100)
right(90)pencolor('green')
forward(200)
right(90)pencolor('blue')
forward(100)
right(90)# 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
done()

在命令行运行上述代码,会自动弹出一个绘图窗口,然后绘制出一个长方形:

从程序代码可以看出,海龟绘图就是指挥海龟前进、转向,海龟移动的轨迹就是绘制的线条。要绘制一个长方形,只需要让海龟前进、右转90度,反复4次。

调用width()函数可以设置笔刷宽度,调用pencolor()函数可以设置颜色。更多操作请参考turtle库的说明。

绘图完成后,记得调用done()函数,让窗口进入消息循环,等待被关闭。否则,由于Python进程会立刻结束,将导致窗口被立刻关闭。

turtle包本身只是一个绘图库,但是配合Python代码,就可以绘制各种复杂的图形。例如,通过循环绘制5个五角星:

from turtle import *def drawStar(x, y):pu()goto(x, y)pd()# set heading: 0seth(0)for i in range(5):fd(40)rt(144)for x in range(0, 250, 50):drawStar(x, 0)done()

程序执行效果如下:

使用递归,可以绘制出非常复杂的图形。例如,下面的代码可以绘制一棵分型树:

from turtle import *# 设置色彩模式是RGB:
colormode(255)lt(90)lv = 14
l = 120
s = 45width(lv)# 初始化RGB颜色:
r = 0
g = 0
b = 0
pencolor(r, g, b)penup()
bk(l)
pendown()
fd(l)def draw_tree(l, level):global r, g, b# save the current pen widthw = width()# narrow the pen widthwidth(w * 3.0 / 4.0)# set color:r = r + 1g = g + 2b = b + 3pencolor(r % 200, g % 200, b % 200)l = 3.0 / 4.0 * llt(s)fd(l)if level < lv:draw_tree(l, level + 1)bk(l)rt(2 * s)fd(l)if level < lv:draw_tree(l, level + 1)bk(l)lt(s)# restore the previous pen widthwidth(w)speed("fastest")draw_tree(l, 4)done()

执行上述程序需要花费一定的时间,最后的效果如下:

Python图形处理相关推荐

  1. Oracle+Python适合 Oracle DBA 使用的 Python

    传统上,当需要为操作系统编写一些脚本时,人们常常会选用 Bash 或 Perl 脚本工具.这些工具易于使用,因而它们几乎变得无处不在,渗透到了包括 Oracle Database 在内的其他软件中,O ...

  2. Python图像处理库PIL -- 学习资源

    Resources 官方指南PIL Handbook(建议看英文,翻译) pil下载 安装中文指南 from the PythonWare PIL home page 推荐先看Python Imagi ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  4. python列表add用法_使用add_edge_list()方法创建图形的最佳方法是什么?

    如果你有一个10^6-10^7顶点的稠密图(是一些医学数据还是社交图?它可以改变一切),你不应该使用networkx,因为它是用纯Python编写的,所以它比graph-tool或{}慢10-100倍 ...

  5. 收集了一些python的文章

    转载自:http://blog.csdn.net/xyw_blog/article/details/9128777 newthreading - safer concurrency for Pytho ...

  6. 收集到一些关于python的文章,存起来慢慢看。。。

    2019独角兽企业重金招聘Python工程师标准>>> newthreading - safer concurrency for Python 安全并发(1回应)  http://w ...

  7. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  8. 使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图

    后台回复[入门资料] 送你十本Python电子书 之前有篇推文分享了如何在 Matplotlib 中生成 GIF 可视化图表,有一定的限制.本文将介绍如何用 Pillow 创建 GIF,可以将任意多张 ...

  9. python安装pillow图形处理库

    python3.9没有自带图形处理库 需要安装库Pillow pip install Pillow 才能使用以下命令 from PIL import Image 系统里面有几个版本的python 默认 ...

  10. 自学Python第二十三天- pillow 库,图形处理及绘画

    自学Python第二十三天- pillow 库,图形处理及绘画 pillow 的安装及引用 图形基础 Image 类 创建图片 加载图片 Image 图形对象的常用方法和属性 resize 方法 co ...

最新文章

  1. linux添加window启动
  2. 4邻接、8邻接、m邻接
  3. keepalive配置mysql自动故障转移
  4. [转] 先验概率与后验概率贝叶斯与似然函数
  5. 【转】正则表达式之基本概念
  6. Lesson_8 上课笔记 ----继承
  7. linux安装mvn及nexus远程仓库
  8. 难道我们就是那0.0000001%
  9. 前端aes专用秘钥加解密_Javascript实现前端AES加密解密功能
  10. 一个免费功能强大的谷歌翻译api
  11. IE8中解决Cell华表插件不显示方法!
  12. 计算机好多个页面,哪些电脑分屏软件好用?好用电脑分屏软件推荐
  13. 广和通高通物联网技术开放日成功举办
  14. 班级网站-前端网页技术精美完整源码HTML+CSS+JS
  15. Fine Dining(最短路应用)
  16. ubuntu18.04安装与更新NVIDIA驱动
  17. 移动智能与终端安全防护
  18. MODIS数据wget下载
  19. Eclipse+tomcat开发j2ee经典入门例子
  20. 520礼物清单、送男友实用礼物排行榜

热门文章

  1. 13年草根程序员转型之路
  2. Python调用华为API实现人脸检测
  3. 统考计算机u盘禁用,四个轻松解除电脑禁用U盘的方法
  4. 2021年江苏省高考数据统计:江苏省普通类报名人数30.9万人,本土167所高校(2所985大学)
  5. 贷款综合管理系统搭建-全流程智能、高效、安全管理解决方案
  6. Java飞机小游戏代码详解
  7. 【1】国产USB转接芯片CH347-初体验
  8. 湖南大学计算机与通信学院李燕,基于SVM的面部表情分析
  9. 任何矩阵都能变换成梯形阵的证明
  10. 蓝牙锁定计算机,win7怎么设置蓝牙加密狗|win7蓝牙加密狗的使用方法