python处理图像文件
python处理图像文件
- 安装pillow模块
pip install pillow
from PIL import ImageColor
1.pillow模块的RGBA
在pillow模块中,RGBA分别代表Red红色、Green绿色、Blue蓝色和Alpha透明度。这4个数值组成元组,范围都在0~255之间,Alpha的值越小,透明度越高。
1.1 getrgb()
getrgb()函数可以将颜色符号或字符串转成元组:
(r, g, b) = getrgb(color)
1.2 getcolor()
(r, g, b) = getcolor(color, “mode”) # 返回色彩元组
mode为”RGBA" --> 返回RGBA元组
mode为”RGB" --> 返回RGB元组
mode为其他 --> 返回整数值
# author:mlnt
# createdate:2022/8/19
from PIL import ImageColor"""
1.getrgb()
getrgb()函数可以将颜色符号或字符串转成元组:
(r, g, b) = getrgb(color)
"""
print(ImageColor.getrgb('#0000ff')) # (0, 0, 255)
print(ImageColor.getrgb("rgb(0, 255, 255)")) # (0, 255, 255)
print(ImageColor.getrgb('blue')) # (0, 0, 255)
print(ImageColor.getrgb('rgb(0%, 50%, 100%)')) # (0, 128, 255)# 2.getcolor()
# (r, g, b) = getcolor(color, "mode") # 返回色彩元组
"""
mode为”RGBA" --> 返回RGBA元组
mode为”RGB" --> 返回RGB元组
mode为其他 --> 返回整数值
"""
print(ImageColor.getcolor('#0000ff', 'RGB')) # (0, 0, 255)
print(ImageColor.getcolor("rgb(0, 255, 255)", 'RGBA')) # (0, 255, 255, 255)
print(ImageColor.getcolor('blue', 'RGB')) # (0, 0, 255)
print(ImageColor.getcolor('rgb(0%, 50%, 100%)', 'RGBA')) # (0, 128, 255, 255)
2. pillow模块的盒子元组
最左上角的像素的(x,y)是(0,0),x轴像素往右递增,y轴像素往下递增。
盒子元组的参数是(left,top,right,bottom):
left:盒子左上角的x轴坐标;
top:盒子左上角的y轴坐标;
right:盒子右下角的x轴坐标;
bottom:盒子右下角的y轴坐标
3. 图像的基本操作
- open():打开图片
- size属性:获取图片宽高
- filename属性:获取图片源文件名称
- format属性:获取图像文件格式(后缀)
- format_description属性:获取详细的文件格式描述
- save():存储文件,可将文件另存为其他图片格式
- new(mode, size, color=0):创建新的图像对象
# author:mlnt
# createdate:2022/8/19from PIL import Image# 1.打开图片
image = Image.open('gailun.jpeg') # 创建pillow对象
print(type(image)) # <class 'PIL.JpegImagePlugin.JpegImageFile'># 2.获取图像的大小属性
width, height = image.size # 获得图像的宽度和高度
print(f'width: {width}, height: {height}') # width: 682, height: 384# 3.获取图像文件名
print(f'filename: {image.filename}') # filename: gailun.jpeg# 4.获取图像的文件格式
print(f'扩展名: {image.format}') # 扩展名: JPEG
print(f'文件格式描述:{image.format_description}') # 文件格式描述:JPEG (ISO 10918)# 5.存储文件
# 另存为png格式文件
image.save('gailun.png')# 6.创建新的图像对象
"""
使用new()方法创建新的图像对象,语法格式:
new((mode, size, color=0)
mode:RGBA(建立png文件),RGB(创建jpg文件)
size的参数为元组
color预设为黑色
"""
picture = Image.new(mode="RGB", size=(100, 200), color='SteelBlue')
picture.save(fp='newPicture.jpg')
newPicture.jpg:
4. 图像的编辑
4.1 更改图像大小–resize()
resize((width, height), Image.BILINEAR)
Image.NEAREST:最低质量
Image.ANTIALIAS:最高质量
Image.BISCUBIC:三次方取样法
# author:mlnt
# createdate:2022/8/19# 1.更改图像大小resize()
"""
resize((width, height), Image.BILINEAR)
Image.NEAREST:最低质量
Image.ANTIALIAS:最高质量
Image.BISCUBIC:三次方取样法
"""
from PIL import Image# 打开图像
picture = Image.open('newPicture.jpg')
# 获取大小属性
width, height = picture.size
newPict1 = picture.resize((width * 2, height)) # 宽度为原来的2倍
newPict1.save('2width.jpg')
newPict2 = picture.resize((width, height * 2)) # 高度为原来的2倍
newPict2.save('2height.jpg')
4.2 图像旋转–rotate()
# author:mlnt
# createdate:2022/8/19"""
rotate()方法可以逆时针旋转图像
如果旋转90度或270度:宽高变化,图像本身比率不变,多的部分以黑色图像替代。
旋转其他角度则图像维持不变。
"""
from PIL import Imagepicture = Image.open('gailun.jpeg')
picture.rotate(90).save('r90.jpg') # 旋转90度
picture.rotate(180).save('r180.jpg') # 旋转180度
picture.rotate(270).save('r270.jpg') # 旋转270度# 增加expand=True参数,将放大图像,让整个图像显示,多余部分用黑色填满
picture.rotate(270, expand=True).save('r270_ex.jpg') # 旋转270度
旋转90度
旋转180度
旋转270度
旋转270加放大
4.3 图像翻转–transpose()
使用**transpose()**方法可以让图像翻转:
- transpose(Image.Transpose.FLIP_LEFT_RIGHT):左右翻转
- transpose(Image.Transpose.FLIP_TOP_BOTTOM):上下翻转
# author:mlnt
# createdate:2022/8/19"""
使用transpose()方法可以让图像翻转
transpose(Image.Transpose.FLIP_LEFT_RIGHT):左右翻转
transpose(Image.Transpose.FLIP_TOP_BOTTOM):上下翻转
"""from PIL import Imagepicture = Image.open('gailun.jpeg')
picture.transpose(Image.Transpose.FLIP_LEFT_RIGHT).save('FLIP_LEFT_RIGHT.jpg') # 左右翻转
picture.transpose(Image.Transpose.FLIP_TOP_BOTTOM).save('FLIP_TOP_BOTTOM.jpg') # 上下翻转
左右翻转:
上下翻转:
4.4 图像像素编辑
- getpixel()方法可以取得图像某一位置像素的色彩
# author:mlnt
# createdate:2022/8/19"""
getpixel()方法可以取得图像某一位置像素的色彩
getpixel((x,y))
"""from PIL import ImagenewImage = Image.new('RGBA', (200, 200), 'green')
print(newImage.getpixel((100, 100))) # 打印中心点的色彩
newImage.save('newImage1.png')
# (0, 128, 0, 255)
- putpixel()方法可以在图像的某个位置填入色彩
# author:mlnt
# createdate:2022/8/19
"""
putpixel()方法可以在图像的某个位置填入色彩
putpixel((x,y),(r,g,b,a))
"""
from PIL import Image
from PIL import ImageColornewImage = Image.new('RGBA', (200, 200), 'green')
for x in range(50, 151): # x轴区间在50-150for y in range(50, 100): # y轴区间在50-99newImage.putpixel((x, y), (0, 255, 255, 255))
newImage.save('putpixel_test1.png')
for x in range(50, 150): # x轴区间在50-149for y in range(90, 120): # y轴区间在90-119newImage.putpixel((x, y), ImageColor.getcolor('Yellow', 'RGBA'))
newImage.save('putpixel_test2.png')
4.5 裁切、复制与图像合成
- 裁切图像–crop()
# author:mlnt
# createdate:2022/8/19
"""
crop()方法裁剪图像
参数为元组,内容为区间坐标(左,上,右,下)
"""
from PIL import Imagepicture = Image.open('yase.jpeg')
crop_pic = picture.crop((30, 20, 450, 360)) # 裁剪区间
crop_pic.save('crop_pic.jpg')
复制图像copy()
# author:mlnt # createdate:2022/8/19""" copy()方法 """ from PIL import Imagepicture = Image.open('yase.jpeg') copy_pic = picture.copy() # 复制 copy_pic.save('copy_pic.jpg')
图像合成paste()
paste()方法实现图像合成:
底图图像.paste(插入图像,(x,y))
(x,y)为图像插入的位置
# author:mlnt# createdate:2022/8/19"""paste()方法实现图像合成底图图像.paste(插入图像,(x,y))(x,y)为图像插入的位置"""from PIL import Imagepic1 = Image.open('gailun.jpeg')pic2 = Image.open('yase.jpeg')crop_pic = pic2.crop((120, 20, 436, 370)) # 裁剪区间pic1.paste(crop_pic, (1, 40))pic1.save('图像合成.jpg')
将裁剪图片填满图像区间
# author:mlnt # createdate:2022/8/19 from PIL import Imagepic = Image.open('img.jpeg') crop_pic = pic.crop((20, 20, 80, 80)) # 裁剪区间 crop_width, crop_height = crop_pic.size # 获得裁切区间的宽高width, height = 440, 440 # 新图像宽高 newImage = Image.new('RGB', (width, height), 'green') # 创建新图像 for x in range(10, width-20, crop_width):for y in range(10, height-20, crop_height):newImage.paste(crop_pic, (x, y)) # 合成newImage.save('图像铺满.jpg')
4.6 图像添加滤镜
pillow模块内的ImageFilter模块中的filter()可以给图片加上滤镜效果。此方法的参数意义:
- BLUR:模糊;
- CONTOUR:轮廓;
- DETAIL:细节增强
- EDGE_ENHANCE:边缘增强;
- EDGE_ENHANCE_MORE:深度边缘增强;
- EMBOSS:浮雕效果;
- FIND_EDGES:边缘信息;
- SMOOTH:平滑效果;
- SMOOTH_MORE:深度平滑效果;
- SHARPEN:锐化效果。
# author:mlnt
# createdate:2022/8/20
"""
pillow模块内的ImageFilter模块中的filter()可以给图片加上滤镜效果。此方法的参数意义:
BLUR:模糊;
CONTOUR:轮廓;
DETAIL:细节增强
EDGE_ENHANCE:边缘增强;
EDGE_ENHANCE_MORE:深度边缘增强;
EMBOSS:浮雕效果;
FIND_EDGES:边缘信息;
SMOOTH:平滑效果;
SMOOTH_MORE:深度平滑效果;
SHARPEN:锐化效果。
"""
import PIL
from PIL import Image
from PIL import ImageFilterimage = Image.open('img.jpeg') # 创建pillow对象
# 更改图像大小
image = image.resize((80, 80), resample=PIL.Image.Resampling.BILINEAR)
# image.show()
# # 模糊
filter_img = image.filter(ImageFilter.BLUR)
# filter_img.show()
filter_img.save('img_BLUR.jpg')
# 轮廓
filter_img = image.filter(ImageFilter.CONTOUR)
filter_img.save('img_CONTOUR.jpg')
# 细节增强
# filter_img = image.filter(ImageFilter.DETAIL)
# filter_img.save('img_DETAIL.jpg')
# 边缘增强
filter_img = image.filter(ImageFilter.EDGE_ENHANCE)
filter_img.save('img_EDGE_ENHANCE.jpg')
# 深度边缘增强
filter_img = image.filter(ImageFilter.EDGE_ENHANCE_MORE)
filter_img.save('img_EDGE_ENHANCE_MORE.jpg')
# 浮雕效果
filter_img = image.filter(ImageFilter.EMBOSS)
filter_img.save('img_EMBOSS.jpg')
# 边缘信息
filter_img = image.filter(ImageFilter.FIND_EDGES)
filter_img.save('img_FIND_EDGES.jpg')
# 平滑效果
# filter_img = image.filter(ImageFilter.SMOOTH)
# filter_img.save('img_SMOOTH.jpg')
# 深度平滑效果
# filter_img = image.filter(ImageFilter.SMOOTH_MORE)
# filter_img.save('img_SMOOTH_MORE.jpg')
# 锐化效果
filter_img = image.filter(ImageFilter.SHARPEN)
filter_img.save('img_SHARPEN.jpg')
效果:
4.7 图像内绘制图案
pillow模块内有一个ImageDraw模块,利用此模块可以绘制:点(Points)、线(Lines)、矩形(Rectangles)、椭圆(Ellipses)、多边形(Polygons)
- 1.绘制点:point([(x1,y1),…(xn,yn)],fill),fill为设置的颜色
- 2.绘制线条:line([(x1,y1),…(xn,yn)], width, fill) ,width为宽度
- 3.ellipse()方法绘制圆或椭圆:
ellipse((left,top,right,bottom), fill, outline),outline为外框颜色 - 4.rectangle()方法绘制椭圆:rectangle((left,top,right,bottom), fill, outline)
- 5.polygon()方法绘制多边形:polygon([(x1,y1),…(xn,yn)], fill, outline)
# author:mlnt
# createdate:2022/8/19
"""
pillow模块内有一个ImageDraw模块,利用此模块可以绘制:
点(Points)、线(Lines)、矩形(Rectangles)、椭圆(Ellipses)、多边形(Polygons)
"""
from PIL import Image, ImageDrawnewImage = Image.new('RGBA', (300, 300), 'green')
drawObj = ImageDraw.Draw(newImage)# 1.绘制点
# point([(x1,y1),...(xn,yn)],fill) fill为设置的颜色
for x in range(100, 200, 3):for y in range(100, 200, 3):drawObj.point([(x, y)], fill='orange')# 2.绘制线条
# line([(x1,y1),...(xn,yn)], width,, fill) width为宽度
drawObj.line([(0, 0), (299, 0), (299, 299), (0, 299), (0, 0)], fill='blue')
for x in range(150, 300, 10):drawObj.line([(x, 0), (300, x - 150)], fill='yellow')for y in range(150, 300, 10):drawObj.line([(0, y), (y - 150, 300)], fill='yellow')# 绘制矩形
drawObj.rectangle((100, 200, 210, 240), outline='silver')# 绘制圆和椭圆
drawObj.ellipse((20, 10, 280, 290), outline='black')
drawObj.ellipse((50, 50, 120, 120), outline='brown')
drawObj.ellipse((180, 180, 200, 200), outline='orange')# 绘制多边形
drawObj.polygon([(150, 120), (100, 100), (120, 100), (150, 120)], fill='Aqua')newImage.save('图案.png')
4.8 在图像内添加文字
text((x,y),text,fill,font)
使用其他字体,需调用ImageFont.truetype()方法选用字体,同时设定字号。
使用ImageFont.truetype()前需导入ImageFont模块:
ImageFont.truetype(字体路径,字号)
# author:mlnt
# createdate:2022/8/19
"""
text((x,y),text,fill,font)
使用其他字体,需调用ImageFont.truetype()方法选用字体,同时设定字号。
使用ImageFont.truetype()前需导入ImageFont模块
text(字体路径,字号)
"""
from PIL import Image, ImageDraw, ImageFontnewImage = Image.new('RGBA', (500, 300), 'green')
drawObj = ImageDraw.Draw(newImage)strText = 'Hello world'
drawObj.text((50, 50), strText, fill='blue')
fontInfo = ImageFont.truetype(r'C:\Windows\Fonts\IMPRISHA.TTF', 24)
drawObj.text((50, 100), strText, fill='red', font=fontInfo)strText_2 = '天朗气清,惠风和畅'
fontInfo = ImageFont.truetype(r'C:\Windows\Fonts\Muyao.TTF', 28)
drawObj.text((50, 180), strText_2, fill='orange', font=fontInfo)strText_3 = '天朗气清,惠风和畅'
fontInfo = ImageFont.truetype(r'C:\Windows\STXINGKA.TTF', 28)
drawObj.text((50, 240), strText_2, fill='Brown', font=fontInfo)# 竖排显示
strText_4 = '玄池嫣韵\n坦荡\n勤能补拙'
# 初始化参数
x = 360 # 横坐标(左右)
y = 20 # 纵坐标(上下)
right = 0 # 往右位移量
down = 0 # 往下位移量
w = 300 # 文字宽度
h = 300 # 文字高度
# 设置字体
font = ImageFont.truetype("C:\\Windows\\Fonts\\STXINGKA.TTF", 42)
for k, s2 in enumerate(strText_4):if k == 0:box = font.getbbox(s2)w, h = box[2] - box[0], box[3] - box[1] # 获取第一个文字的宽和高if s2 == "," or s2 == "\n": # 换行识别right = right + wdown = 0continueelse:down = down + hprint("序号-值", k, s2)print("宽-高", w, h)print("位移", right, down)print("坐标", x + right, y + down)drawObj.text((x + right, y + down), s2, (255, 255, 0), font=font) # 设置位置坐标 文字 颜色 字体
newImage.show()
newImage.save('写字.png')
参考:
- https://www.likecs.com/show-203574770.html
- https://blog.csdn.net/qq_36874480/article/details/123569375
python处理图像文件相关推荐
- python 速度 memmap_浅析Python 读取图像文件的性能对比
浅析Python 读取图像文件的性能对比 发布时间:2020-08-30 16:31:06 来源:脚本之家 阅读:57 作者:BriFuture''s Blog 使用 Python 读取一个保存在本地 ...
- python 读入图像文件和输出图像文件
目录 Matplotlib Python读入图像文件 模块 方法 功能 参数(Parameters) 返回值(Returns) Python输出图像文件 模块 方法 功能 参数(Parameters) ...
- Python处理图像文件的实用姿势
那些人人称道的美丽,里面都有PS的痕迹. 人是视觉型动物,每个人都有自己的审美标准,那些共同的准则形成了社会潮流. 随着计算机技术升级,我们现在可以用手机随时拍出漂亮的照片. "PS&quo ...
- python实现图像文件等比例压缩
图像文件压缩.使用PIL库对图像进行等比例压缩,无论压缩前文件大小如何,压缩后文件大小小于10KB. from PIL import Image#引入PIL库中的Image类 import os#引入 ...
- python显示图像文件要放在哪儿_opencv显示图像要把图像放在哪里
非常简单,你用的是win7而不是xp,如果是在xp上上面的代码当然是可以的:貌似是因为你win7摄像头的缘故,还好像与vfw模式有关系吧,win7貌似没有vfw,楼主可以使用directshow模块来 ...
- python做图像处理快不快_Python 图像读写谁最快?不信就比一比
图像处理,顾名思义,是对图像进行的各种转换.计算等处理.图像处理必不可少地需要读写图像文件. 图像文件的读取,就是将图像数据从磁盘中的文件内读入内存,之后按照图像解码标准解码,最后把图像各像素的值存储 ...
- python图片-Python图像处理
图像处理 本章工作任务 u 任务1:了解Pillow库的基本操作 u 任务2:掌握图像格式转换 u 任务3:掌握改变图像尺寸 u 任务4:掌握剪裁图像 u 任务5:掌握滤镜处理 本章技能目标及重难点 ...
- 【Python进阶】实战Python图形文件操作基本编程
欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...
- python方向键控制角色_用python和pygame游戏编程入门-控制角色移动
在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下: #!/usr/bin/env python #指定图像文件名称 b ...
最新文章
- javascript——Array类型
- 我的RHCA之路随想
- Oracle学习:视图与索引
- usaco1.2.2 transform
- CodeForces - 1355E Restorer Distance(三分)
- alarm项目bug
- node.js ejs_如何在Node.js应用程序中使用EJS模板
- 最优二叉查找树(动态规划)——详解
- 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
- idea 设置重复代码检测
- 我们称字母顺些和逆写都相同的单词或者短语为“回文”,编写一个Java程序判断输入的一行文本是否是回文。
- 汽车行业大数据解决方案的应用案例详细分析
- 初窥门径:认识C语言
- ABAP——smartform添加图片
- 解决Win2016提示 “发生身份验证错误 要求的函数不受支持“的问题
- 苹果删除照片不释放内存_别再胡乱清理垃圾了,只要删除这6个文件夹,瞬间释放20GB内存...
- oracle繁体字筛选,Oracle数据库字符集浅析
- python 工资条_当财务部的人会编程,会发生什么?Python实现自动化群发工资条...
- 刘利刚-什么是计算机图形学?
- 使用opencv进行USB摄像头参数配置
热门文章
- java教程设计_Java教学设计方案.doc
- 基于RFID技术在服装智慧门店中的应用-rfid服装盘点
- jenkins安装 插件插件失败 简单快捷安装办法
- 电器与计算机工程 英文,电气与电子工程专业英语
- 机器学习 4 个常用超参数调试方法!
- netlink简单介绍 (linux-3.14.2)
- 怎么查看当前DLL所需要依赖的其他DLL
- 《傲慢与偏见》读后感
- 【CAD二次开发】最完美EntityJig画polyline arc实例
- 盘点世界上最难的 5 种编程语言!网友看后惊讶道:竟不是C/C++?