586|10

552

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

书籍《Python编程快速上手(第2版)》阅读心得10、操作图像 [复制链接]

图像处理在日常工作中也是非常常见,Python也提供了处理图像的模块,但是不是python自带的模块,而是第三方模块,使用时需要进行手动安装。

这篇我们使用的模块是pillow,专门用来处理图像的的一个模块。

图像是有颜色的,用RGBA表示,R表示Red(范围0~255),G表示Green(范围0~255),B表示Blue(范围0~255),A表示alpha(透明度,范围0~255,0表示完全透明,255表示完全不透明)。

接下来,将用一些例子来说明图像的操作。

 

from PIL import Image

# 打开一张图片
img = Image.open('D:\\Python\\python.png')

# 打印图片尺寸
print(img.size)

# 打印文件名
print(img.filename)

# 打印图片格式
print(img.format)

# 打印文件格式的详细描述
print(img.format_description)

# 另存为python.jpg
img.save('D:\\Python\\python.jpg')

# 新建一张100*200的图片,颜色为purple
new_img = Image.new('RGBA', (100, 200), 'purple')

# 保存图片
new_img.save('D:\\Python\\purpleImage.png')

# 重新打开python.png
img = Image.open('D:\\Python\\python.png')
# 裁剪图片,从坐标(335, 345)到(565,560)
croppedImg = img.crop((335, 345, 565, 560))
# 保存裁剪的图片
croppedImg.save('D:\\Python\\croppedImage.png')

# 复制一张img保存在copyImg变量中
copyImg = img.copy()

# 将图片croppedImg粘贴到图片copyImg上,粘贴到坐标(0,0)
copyImg.paste(croppedImg, (0, 0))
# 将图片croppedImg粘贴到图片copyImg上,粘贴到坐标(100,100)
copyImg.paste(croppedImg, (100, 100))
# 保存图片
copyImg.save('D:\\Python\\pastedImage.png')

 

程序中,首先使用Image.open()方法开了一张本地的图片,文件对象为img,然后用img.size获取了图片的尺寸,还可以用img.filenam获取文件名,用img.format_description获取格式的详细信息,使用Image.new()方法新建图片。

接下来,使用img.crop()方法对图片进行了裁剪,然后将裁剪后的小图片粘贴到了原来的大的图片上。

 

原图:

 

裁剪后的图片:

 

 

 

粘贴后的图片:

  

 

除了图片的复制,粘贴,裁剪,新建,保存以外,pillow模块还可以调整图像的大小,旋转和翻转图片,更改单个像素。

来通过一个例子来看看,这些功能。

from PIL import Image

# 打开一张图片
img = Image.open('D:\\Python\\python.png')

# 获取图片的宽度和高度
width, height = img.size

# 打印图片尺寸
print(img.size)

# 将图片缩小为原来的1/4,并将生成一张新的图片
# resize不会更原来图像的尺寸,而是返回一个新的图片对象
quarterSizedImg = img.resize((int(width / 2), int(height / 2)))

# 打印新的图片尺寸
print(quarterSizedImg.size)

# 保存图片
quarterSizedImg.save('D:\\Python\\quarterSizedImg.png')

# 将img图片逆时针旋转90度,并另存为rotate90.png
# rotate也不会改变原来图片的方向,而是返回一个新的图片对象
# 旋转90度和270度会改变图像的宽度和高度,旋转其它角度宽度个高度保持不变。
# windows上使用黑色背景来填补旋转造成的缝隙
img.rotate(90).save('D:\\Python\\rotate90.png')

# 将img图片逆时针旋转180度,并另存为rotate180.png
# rotate也不会改变原来图片的方向,而是返回一个新的图片对象
img.rotate(180).save('D:\\Python\\rotate180.png')

# 将img图片逆时针旋转6度,并另存为rotate6.png
# rotate也不会改变原来图片的方向,而是返回一个新的图片对象
# windows上使用黑色背景来填补旋转造成的缝隙
img.rotate(6).save('D:\\Python\\rotate6.png')

# 水平镜像
img.transpose(Image.FLIP_LEFT_RIGHT).save('D:\\Python\\horizontal_flip.png')
# 垂直镜像
img.transpose(Image.FLIP_TOP_BOTTOM).save('D:\\Python\\vertical_flip.png')

程序中打开了一张图片,得到了图片的对象img,然后通过img.resize()方法将图片缩小为原来的四分之一,

然后再使用img.rotate()方法将图片旋转90度,270,和6度。其中90度和270度会改变图像的宽和高,其它角度不会改变图像的宽度和高度,但是windows上使用黑色背景来填补旋转造成的缝隙。img.transpose()方法可将图像进行水平镜像和垂直镜像。

缩小后的图片:

 

 

旋转90度的图片:

 

 

旋转6度后的图片,可以看到背景用黑色进行了填充:

 

除了以上这些操作,pillow模块还能在图像上进行绘画,比如绘制点,线,矩形等各种形状,绘制形状需要使用到pillow的ImageDraw模块。

还能绘制文本,通过ImageFont模块。

来看看怎么实现这些功能。

from PIL import Image, ImageDraw, ImageFont

# 新建一张图片,指定大小为200 * 200,白色背景
img = Image.new('RGBA', (200, 200), 'white')

# 定义一个draw对象,用户绘制形状
draw = ImageDraw.Draw(img)

# 画线,每个点都是线上的点
draw.line([(0,0), (150, 0), (150, 150),(0, 150), (0, 0)], fill='red')

# 画矩形
draw.rectangle((20, 30, 60, 60), fill='blue')

# 绘制文本
draw.text((20, 150), 'HELLO  EEWORLD!', fill='purple')

# 保存
img.save('D:\\Python\\draw.png')

绘制完的图片如下:

 

 通过draw.line()方法画了线条,通过draw.rectangle()方法画了矩形,通过draw.text()方法设置了文本“HELLO  EEWORLD!”,其实还能设置文本的字体,我这里使用的是默认字体。

 

通过以上内容能看出了pillow模块还是非常强大的,我这里用到的可能只是该模块一些最常用的一些方法,应该还有更多的方法可以继续探索,有时间再详细了解其它有用的方法。

 

 

最新回复

嗯,看起来很牛逼的样子啊,先下载下来了。等有时间了,好好研究研究哈。   详情 回复 发表于 2024-6-7 21:47
点赞 关注
 
 

回复
举报

6992

帖子

11

TA的资源

版主

沙发
 

通过以上内容能看出了pillow模块还是非常强大的,我这里用到的可能只是该模块一些最常用的一些方法,应该还有更多的方法可以继续探索,有时间再详细了解其它有用的方法。

python就是生态好呀,模块多!

点评

对,python的最大优势就是模块多  详情 回复 发表于 2024-6-5 10:08
 
 
 

回复

1380

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 

兄弟进展顺利呀!恭喜恭喜!!

Pillow貌似也在一直更新。。。。

点评

是的,一直在更新,最新版本10.3.0  详情 回复 发表于 2024-6-5 10:11
 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

4
 
lugl4313820 发表于 2024-6-5 07:58 通过以上内容能看出了pillow模块还是非常强大的,我这里用到的可能只是该模块一些最常用的一些方法,应该还 ...

对,python的最大优势就是模块多


 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

5
 
hellokitty_bean 发表于 2024-6-5 09:13 兄弟进展顺利呀!恭喜恭喜!! Pillow貌似也在一直更新。。。。

是的,一直在更新,最新版本10.3.0


 
 
 

回复

755

帖子

5

TA的资源

纯净的硅(高级)

6
 

感谢楼主分享的python操作图像的技术知识,涨知识了,感谢楼主

点评

一起学习  详情 回复 发表于 2024-6-5 19:28
 
 
 

回复

6483

帖子

9

TA的资源

版主

7
 

python的第三方模块资源就是丰富,好用  

点评

是的,python最方便的就是第三方模块丰富  详情 回复 发表于 2024-6-5 19:29
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

8
 
chejm 发表于 2024-6-5 13:22 感谢楼主分享的python操作图像的技术知识,涨知识了,感谢楼主

一起学习

 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

9
 
秦天qintian0303 发表于 2024-6-5 13:34 python的第三方模块资源就是丰富,好用  

是的,python最方便的就是第三方模块丰富

 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

10
 

嗯,看起来很牛逼的样子啊,先下载下来了。等有时间了,好好研究研究哈。

点评

值得研究一下  详情 回复 发表于 2024-6-8 08:21
 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

11
 
竹叶听筝 发表于 2024-6-7 21:47 嗯,看起来很牛逼的样子啊,先下载下来了。等有时间了,好好研究研究哈。

值得研究一下

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表