python之pil的使用详解

一:PIL功能介绍与安装

PIL,全称Python Image Library,主要作用是图像处理,可用于图片剪切、粘贴、缩放、镜像、水印、颜色块、滤镜、图像格式转换、色场空间转换、验证码、旋转图像、图像增强、直方图处理、插值和滤波等功能。不过只支持到Python 2.7。Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。我们需要安装的就是Pillow。

PIL具体用途:

  • 图像归档(Image Archives)。PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。
  • 图像展示(Image Display)。PIL较新的版本支持包括Tk PhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。
  • 图像处理(Image Processing)。PIL包括了基础的图像处理函数,包括对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。

pip install Pillow

貌似Pillow是默认安装好了的,可以通过pip list查看是否已经安装

二:PIL的基本操作

以下是打开图片保存图片的基本操作。

from PIL import Image

# 1.打开图片
img = Image.open("image/10.jpg")
# 2.显示图片(执行显示图片后线程会中断,关闭图像后恢复)
img.show()
# 3.保存图片
img.save("image/xiaomai.jpg")

我在尝试的过程中发现,jpg格式的图片保存为jpg格式时会报错:OSError: cannot write mode RGBA as JPEG,经过查阅资料发现错误原因主要是因为jpg格式和JPG格式图片的通道数不同。

  • jpg是四通道:RGBA意思是红色,绿色,蓝色,Alpha的色彩空间,Alpha指透明度
  • JPG是三通道:RGB意思是红色,绿色,蓝色

所以,jpg格式图片要保存成JPG格式就要丢弃A通道:

from PIL import Image

# 1.打开图片
img = Image.open("image/10.jpg")
# 2.显示图片(执行显示图片后线程会中断,关闭图像后恢复)
img.show()
# 3.保存图片
img = img.convert("RGB")
img.save("image/xiaomai.jpg")

下面是图片旋转的代码:

from PIL import Image

# 1.打开图片
img = Image.open("pli/7.jpg")
# 2.水平翻转
img1 = img.transpose(Image.FLIP_LEFT_RIGHT)
# 3.保存图片
img1.save("pli/1.jpg")
# 4.垂直翻转
img2 = img.rotate(180)
# 5.保存照片
img2.save("pli/2.jpg")
# 6.水平+垂直翻转
img3 = img.transpose(Image.FLIP_LEFT_RIGHT).rotate(180)
# 7.保存图片
img3.save("pli/3.jpg")

三:给图片增加文字

要在图像上绘制文本要用到 PIL 的两个模块:ImageDraw和ImageFont。 ImageDraw 用于创建绘图对象,ImageFont用于加载字体。

from PIL import Image, ImageDraw, ImageFont
# 1.打开图片
img = Image.open("image/10.jpg")
# 2.调用画图模块
draw = ImageDraw.Draw(img)
# 3.设置字体
tfont = ImageFont.truetype("萌神手写体.ttf", 24)
# 4.添加文字
"""
    参数一:文字在图片的位置:(x, y)
    参数二:文字内容
    参数三:字体颜色,当然颜色也可以用RGB值指定
    参数四:字体类型
"""
draw.text((50, 30), "eyes++", fill="green", font=tfont)
# 5.保存图片
img.save("image/addWord.jpg")
# 6.显示图片
img.show()

四:PIL滤镜功能

from PIL import Image, ImageFilter
img = Image.open("image/10.jpg")
img = img.filter(ImageFilter.CONTOUR)
img.save("image/Filter.jpg")
img.show()

滤镜类型如下:

五:PIL镜像功能

from PIL import Image
img = Image.open("image/10.jpg")
img = img.transpose(Image.FLIP_LEFT_RIGHT)
img.save("image/mirror.jpg")

transpose

有这么几种模式

  • FLIP_LEFT_RIGHT:左右镜像
  • FLIP_TOP_BOTTOM:上下镜像
  • ROTATE_90:逆时针转90度
  • ROTATE_180:逆时针转180度
  • ROTATE_270:逆时针转270度
  • TRANSPOSE:像素矩阵转置
  • TRANSVERSE

最后一种模式我也不知道什么意思,也没查到,但效果是下面这样的,盲猜是对角线对转。。。。。

除了使用transpose制造镜像,使用rotate也可以的,不过rotate只能旋转:

发现这样旋转会有棱角,然后经过某位不愿透露姓名的大佬指点,发现是rotate旋转只是像素旋转,画布不动,于是我写下了以下测试代码:

from PIL import Image

img = Image.open("image/12.jpg")
img1 = img.transpose(Image.ROTATE_90)
img1.save("image/test.jpg")
img2 = img.rotate(90)
img2.save("image/test2.jpg")

可以发现小埋的rotate旋转不会自动填充空白像素,而血小板的会自动黑色填充。是因为jpg格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性。而jpg格式没有阿尔法通道,因此jpg格式图片不能为透明,jpg格式可以。

六:图片拼接功能

虽说是拼接,但更像是将两幅图粘贴到一个新的画布上

from PIL import Image, ImageDraw

# 打开图片
img1 = Image.open("image/10.jpg")
img2 = Image.open("image/addWord.jpg")
# 查看图片尺寸,便于拼接图片
print(img1.size)
print(img1.size)
# 新建空白图片,三个参数分别是模式(RGB/RGBA)、大小、颜色
newimg = Image.new(mode="RGB", size=(1174, 614), color=(255, 100, 50))
# 拼接图片,第一个参数是图片,第二个是起始位置
newimg.paste(img1, (0, 0))
newimg.paste(img2, (587, 0))
newimg.show()

七:PIL裁剪功能

图片裁剪用到的方法是image.crop(),这个方法能从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。

from PIL import Image
img = Image.open("image/10.jpg")
print(img.size)
imgCut = img.crop((100, 200, 500, 600))
imgCut.show()

在这里插入代码片

八:图片缩放

可能这么看不是二分之一,但这是显示问题,可以看数据:

from PIL import Image

# :
img = Image.open('image/10.jpg')
# 获得图像尺寸:
w, h = img.size
# 缩放到50%:
img.thumbnail((w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
img.save('image/zoom.jpg')

如果有兴趣了解更多相关内容,可以来我的个人网站看看:eyes++的个人网站

到此这篇关于python之pil的使用的文章就介绍到这了,更多相关python pil 使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python使用PIL和matplotlib获取图片像素点并合并解析

    python 版本 3.x 首先安装 PIL 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow. 所以 安装: pip install pillow 获取像素点 import numpy as np from PIL import Image img = Image.open("./b.png").convert('RGBA'

  • Python环境Pillow( PIL )图像处理工具使用解析

    前言 由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python 环境下,对图像的处理笔者主要使用 Pillow 库,主要操作包括对图像的读取.存储和变换等.实际应用中,Pillow 中提供的 Image 模块适合对图像整体进行变换处理操作. 注:以下介绍仅包括对应模块和函数的基础用法,故而在介绍时省略了部分参数和选项,更完备的用法和介绍可参考 Pillow 的

  • python pillow模块使用方法详解

    pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持python2和python3,目前最新版本是3.0.0. Pillow的Github主页:https://github.com/python-pillow/Pillow Pillow的文档(对应版本v3.0.0): https://pillow.readthedocs.org/en/latest/handb

  • python使用PIL剪切和拼接图片

    本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下 因工作需要,接触到了PIL这个包,看其他人的博客踩了一些坑,有些博客并没有注明各个位置参数的含义,今天我就将他补全 切图 1.首先先下载一张图片,我使用的是1200*1200像素的图片,将它放置在G盘的img目录下 2.  我将这张图片切成四等分,我新建了两个文件,分别是img1.img2,用来存放图片 3. 代码 from PIL import Image img = Image.open('G:

  • 详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL,其功能和PIL差不多,但是支持python3. PIL(Python Imaging Library)是Python一个强大方便的图像处理库

  • Python 使用 Pillow 模块给图片添加文字水印的方法

    像微博一类的平台上传图片时,平台都会添加一个水印,宣誓着对图片的所有权,我们自己的博客平台也可以给自己的图片添加上水印. 还是用 Pillow 模块来实现 先来看一个简单的例子 >>> from PIL import Image >>> from PIL import ImageDraw >>> >>> image = Image.open('/Users/wxnacy/Downloads/vm-error1.png') >&g

  • python之pil的使用详解

    一:PIL功能介绍与安装 PIL,全称Python Image Library,主要作用是图像处理,可用于图片剪切.粘贴.缩放.镜像.水印.颜色块.滤镜.图像格式转换.色场空间转换.验证码.旋转图像.图像增强.直方图处理.插值和滤波等功能.不过只支持到Python 2.7.Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.我们需要安装的就是Pillow. PIL具体用途: 图像归档(Image Archives).PIL非常适合于图像归档以及图像的批处理任务

  • 基于Python的PIL库学习详解

    摘要 对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础.在Python中,有一个优秀的图像处理框架,就是PIL库,本博文会分模块,介绍PIL库中的各种方法,并列举相关例子. 参考:http://pillow-cn.readthedocs.io/zh_CN/latest/reference/index.html 网站上列举了PIL库中所有的模块和方法,但是没有相关的例子,博文中会尽量给出相关的例子和进行简单的讲解. 基于的环境:Win10,P

  • 如何利用Python识别图片中的文字详解

    一.Tesseract 文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别.Tesseract是一个用于文字识别的工具,我们结合Python使用可以很快的实现文字识别.但是在此之前我们需要完成一个繁琐的工作. (1)Tesseract的安装及配置 Tesseract的安装我们可以移步到该网址 https://digi.bib.uni-mannheim.de/tesseract/,我们可以看到如下界面: 有很多版本供大家选择,大家可以根据自己的需求选择.其中w32表示32

  • Python实现随机生成图片验证码详解

    使用python生成一个图片验证码,随机的,可以由于验证人机和别的啊,很方便很简单 导入模块 import random from PIL import Image,ImageFont,ImageDraw 生成随机验证码 def rndtxt(): txt_list = [] # 大写字母 txt_list.extend([i for i in range(65,90)]) # 小写字母 txt_list.extend([i for i in range(97,123)]) # 数字 txt_l

  • Python实现滑块拼图验证码详解

    目录 初级版滑块拼图验证码 补充知识点 高级版滑动拼图验证码 滑动拼图验证码可以算是滑块验证码的进阶版本,其验证机制相对复杂.本节将介绍两种滑动拼图验证码:初级版和高级版本. 初级版滑块拼图验证码 初级版滑动拼图验证码是在普通滑块验证码的基础上增加了随机的滑动距离,用户需要根据拼图的缺口位置来决定滑块的滑动位置. 如下左图所示为一个滑块拼图验证码的起始状态,注意此时还没有显示拼图和缺口.单击滑块后就会出现拼图和缺口,如下右图所示.之后会利用这一特性来找到拼图和缺口的位置. 下面开始编写代码.首先

  • Python实现图像压缩和图像处理详解

    目录 入门了解1.颜色 入门了解 2. 像素 用Pillow处理图像 1. 读取和显示图像 2. 剪裁图像 3. 生成缩略图 4. 缩放和黏贴图像 5. 旋转和翻转 6. 操作像素 7. 滤镜效果 使用Pillow绘图 总结 入门了解1.颜色 如果你有使用颜料画画的经历,那么一定知道混合红.黄.蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是美术中的三原色,它们是不能再分解的基本颜色.在计算机中,我们可以将红.绿.蓝三种色光以不同的比例叠加来组合成其他的颜色,因此这三种颜色就是色光三原色.在计

  • Python探索之ModelForm代码详解

    这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,对,你没猜错,相信自己的英语水平. 先来一个简单的例子来看一下这个东西怎么用: 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢? 首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存 其实,重点不是这些,而是合法性验证,我们需要在前端

  • python装饰器实例大详解

    一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1 如果局部没有定义变量x,那么函数内部会从内往

  • python中 logging的使用详解

    日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分. 根据事件的轻重可分为以下几个级别: DEBUG: 详细信息,通常仅在诊断问题时才受到关注.整数level=10 INFO: 确认程序按预期工作.整数level=20 WARNING:出现了异常,但是不影响正常工作.整数level=30 ERROR:由于某些原因,程序 不能执行某些功能.整数level=40 CRITICAL:严重的错误,导致程序不能运行.整数

  • python的mysqldb安装步骤详解

    python的mysqldb安装步骤详解 安装MySQLdb: 一. 什么是MySQLdb? 解释:MySQLdb是Python操作MySQL的一个接口包.这里要理解一个概念,python操作数据库,都是需要一个类似MySQLdb这样的中间层,这些中间层抽象了具体的实现,提供了统一的API供开发者使用. 二. 如何安装MySQLdb? python2环境下: sudo pip install MySQL-python. MySQL-python目前暂时还不支持python3,有些小问题,可以安装

随机推荐