Pillow图像处理
RGBA解释:A代表第三个参数,透明度
RGBA 值是一组数字,指定顔色中的红、绿、蓝和 alpha(透明度)的值。
在 Pillow 中,RGBA 值表示为四个整数值的元组。例如,红色表示为(255,0,0,255)。
from PIL import Image #导入模块
Pillow 的模块名称是 PIL
备注(tkinter库中的Image会有冲突)2022.3.13发现,
解决方法
import PIL
PIL.Image.open( ) 使用
备注:
由于 Pillow 的创建者设计 Pillow 模块的方式,你必须使用 from PIL import Image 形式的 import 语句,而不是简单地 import PIL。
读取图片属性:
from PIL import ImagecatT = Image.open('zophie.jpg') # 加载图片
print(catT.size) # 获得图片尺寸
width, height = catT.size # 用两个变量接收长 和高尺寸元组数值
print(width)
print(height)
# --------------------------------------------------------
print(catT.filename) # 获得图片名称
print(catT.format) # 获得图片的格式
print(catT.format_description) # 获取图片格式和描述catT.save('zophie.png') # 保存图片png格式,相当于转换格式
创建图片:
from PIL import Image
im = Image.new('RGBA', (200, 200), 'red') # 创建图片,RGBA模式,图片尺寸,图片背景颜色red红色
im.save('1.png')
im2 = Image.new('RGBA', (220, 220)) # 创建图片,RGBA模式,图片尺寸,第三个参数没写,不可见的黑色,代表透明
im2.save('2.png') # 创建颜色是png格式才可以
1.图片裁剪:crop()函数
from PIL import Image
catT = Image.open('zophie.jpg') # 加载图片
Im = catT.crop((241, 26, 341, 126)) # 裁剪图像,第一个和第二个参数,X,Y起点坐标,第三和第四个裁剪终点坐标
Im.save('裁剪后图.png') # 裁剪保留原图,不变,创建新的裁剪后图
2.复制黏贴,将剪切图到复制图中 copy()复制图片函数; paste()输出黏贴函数,相当于贴水印
from PIL import Image
cat_y = Image.open('zophie.png') # 加载图片,赋值给cat_y
cat_c = cat_y.copy() # 复制图片,到参数cat_c
jianqie = cat_y.crop((241, 26, 341, 126)) # 剪切图片
print(jianqie.size) # 输出剪切图片尺寸cat_c.paste(jianqie, (0, 0)) # 将剪切图黏贴到,复制的cat_c中,第一个坐标0,0,起始坐标
cat_c.paste(jianqie, (100, 200)) # 第二次复制剪切图
cat_c.save('复制后图.png') # 保存复制后图片为png图
3.图像调整大小:resize()函数
from PIL import Image
catIm = Image.open('zophie.png') # 加载图片,赋值给cat_y
width, height = catIm.size # 元组赋值法:用2个函数接收图像尺寸赋值
img = catIm.resize((int(width / 2), int(height / 2))) # 按比例将图片缩小一半除以2
img.save('调整大小1.png')
img = catIm.resize((width, height + 300)) # 只将高度增加300px
img.save('调整大小2.png')备注:我们将 catIm.size 元组中的两个值赋给变量 width 和 height。使用 width和 height,
而不是 catIm.size[0]和 catIm.size[1],让接下来的代码更易读
备注:resize()方法的元组参数中只允许整数,这就是为什么需要用 int()调用对两个除以 2 的值取整【图像缩小,防止失真:PIL带ANTIALIAS滤镜缩放结果,加入:Image.ANTIALIAS参数】
代码改造: img = img.resize((width, height),Image.ANTIALIAS)
4.图像旋转,和镜像翻转
from PIL import Image
catIm = Image.open('zophie.png') # 加载图片,赋值给cat_y
catIm.rotate(90).save('旋转1.png') # 逆时针,旋转90度,
catIm.rotate(180).save('旋转2.png') # 逆时针,旋转180度
catIm.rotate(270).save('旋转3.png') # 逆时针,旋转270度# 画布撑大,expand=True
# 逆时针,旋转39度,添加expand参数接受图片框架被撑大,改变整体画布大小
catIm.rotate(39, expand=True).save('旋转1.png')
catIm.rotate(39).save('旋转1.png') # 逆时针,旋转39度,无expand参数,整体画布保持不变!# 镜像翻转
catIm.transpose(Image.FLIP_LEFT_RIGHT).save('水平镜像翻转.png') # 水平镜像翻转
catIm.transpose(Image.FLIP_TOP_BOTTOM).save('垂直镜像翻转.png') # 垂直镜像翻转
5.更改单个像素getpixel()函数 和putpixel()函数
from PIL import Image
im = Image.new('RGBA', (100, 100))
print(im.getpixel((0, 0))) # 获取0,0坐标颜色值for x in range(100): # 嵌套循环for range(100)是0-99范围内for y in range(50):print(x, y)im.putpixel((x, y), (210, 210, 210)) # 给图片上色from PIL import ImageColor # 导入ImageColor模块来获取颜色单词名称
for x in range(100): for y in range(50, 100):im.putpixel((x, y), ImageColor.getcolor('darkgray', 'RGBA'))im.save('putPixel.png')
6.im.save( )相关参数
6.1.关于DPI参数
DPI值仅为计算机图像上的元数据。作用是给出了如何显示或打印图像的参数。简单而言:DPI设置是建议图像的缩放级别。修改DPI不会改变图像的内容。如果您想要较大的图像,则修改生成的图片大小,而不是从dpi方面解决。
draw = ImageDraw.Draw(im, 'CMYK') #绘制文件
im.save("D:/target.jpg", dpi=(300.0, 300.0)) #保存文件
6.2.Pillow Image.save 保存为jpg图片压缩
在使用Pillow中的Image.save()方法,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的大小变成几十K。这是因为在保存为jpg的过程中,内部使用压缩算法对图片进行的压缩处理。
但是有些时候往往需要图片的大小不能变化太大或不能太小。所以在使用此方式时可以加入参数:
im.save(img_name, quality=95) # 推荐95最佳
quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。
==im.save( )==方法还有一个可以配合quality使用的参数,能够大大增加图片大小
im.save(img_name, quality=95, subsampling=0)
可能的子采样值是0,1和2,对应于4:4:4,4:2:2和4:1:1(或4:2:0?)。经过实践将值设为0便可以满足图片大小增大的需求。
注意: 以上方法的参数只针对于保存为JPG/JPEG格式的图片的情况。
实战案例:
import os
from PIL import Image
global width, height
SIZE_800 = 800
os.makedirs('Logo水印后文件夹', exist_ok=True) # 用os新建文件夹
logoIm = Image.open('catlogo.png') # 登录水印图片
logoWidth, logoHeight = logoIm.size # 接收水印图尺寸并赋值# for遍历当前文件夹中所有文件,用.表示当前文件夹
for wenjian in os.listdir('.'): if not (wenjian.endswith('.png') or wenjian.endswith('.jpg')) or wenjian == 'catlogo.png': continue # 跳过非图像文件和徽标文件本身im = Image.open(wenjian) # filename为读取文件全名print(im)width, height = im.sizeif width > SIZE_800 and height > SIZE_800: # 判断读取的图片是否大于800pxif width > height:height = int((SIZE_800 / width) * height)width = SIZE_800else:width = int((SIZE_800 / height) * width)height = SIZE_800print('Resizing %s...' % (wenjian))
im = im.resize((width, height)) # 调整图片大小
print('Adding logo to %s...' % (wenjian))# 黏贴图片,黏贴水印 ,第一个参数,黏贴的水印第二个参数,黏贴的坐标位置,第三个参数,遮罩,透明图像
im.paste(logoIm, (width - logoWidth, height - logoHeight), logoIm)
im.save(os.path.join('Logo水印后文件夹', wenjian)) # 保存到指定文件夹
Pillow图像处理相关推荐
- python学习-Pillow图像处理
python学习-Pillow图像处理 Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html ...
- python——适用于py3的pillow图像处理模块plist组图分割
首先说明一下PIL库,PIL(Python Imaging Library)是Python一个强大方便的图像处理库,之前的博客也有用到过PIL模块的demo http://blog.csdn.net/ ...
- python 图像处理_Python常用库-Pillow图像处理
阅读文本大概需要 2.6 分钟. 在Pyhton图像库「Python Imaging Library」支持大量的图片格式,是图像处理和批处理的最佳选择,可以用这个来创建缩略图.文件格式之间的转换.打印 ...
- Pillow图像处理(PIL.Image类的详细使用)
文章目录 Opencv.Matplotlib(plt).Pillow(PIL).Pytorch读取数据的通道顺序 Python图像处理库(PIL.Pillow.Scikit-image.Opencv) ...
- python 包之 Pillow 图像处理教程
一.安装 被认为是python官方图像处理库 PIL非常适合于图像归档以及图像的批处理任务.可以使用PIL创建缩略图,转换图像格式,打印图像等等 PIL支持众多的GUI框架接口,可以用于图像展示 PI ...
- 算法实战应用案例精讲-【图像处理】Pillow图像处理(python代码实战)
目录 操作图像 计算机图像基础 颜色和RGBA值 坐标和 Box 元组 CMYK 和 RGB着色
- 简单实用的Python图像处理库Pillow
Pillow图像处理 Pillow 库的安装 图象处理基本知识 图像的RGB 色彩模式 像素阵列 Image 模块 打开和新建 混合 透明度混合处理 遮罩混合处理 复制和缩放 复制图像 缩放像素 缩放 ...
- Python图像处理库Pillow(PIL)的简单使用
一.PIL和Pillow图像处理库 图像库PIL(Python Image Library)是Python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像 ...
- 图像处理实战-Python编程进阶
pillow图像处理库 PIL(Python Imaging Library)是Python常用的图像处理库,但PIL仅支持到Python2.7,后一群志愿者在PIL的基础上创建了PIL的兼容版本Pi ...
- MOOC网神经网络与深度学习TensorFlow实践3——数字图像处理、TensorFlow基础
数字图像处理 数字图像基本概念 pillow图像处理库 手写数字数据集MNIST TensorFlow基础 TensorFlow2.0特性 创建张量 维度变换 部分采样 张量运算
最新文章
- 怎么讲d 盘里的软件弄到桌面_教大家电脑怎么把e盘文件移到d位置
- 浅析掌握 Python数据分析与展示的几个要点
- 用qss 来控制qlabel显示字体的位置_Word表格总填不好,这些技巧轻松来拯救
- Linux服务器同步时间
- 『程序员』 [程序人生]程序员几种不同的境界
- 爬虫5-BeautifulSoup模块简解
- iMac 是什么?苹果2021新款 iMac 购买建议
- 地球人口承载力估计(信息学奥赛一本通-T1005)
- 《Go 语言程序设计》读书笔记 (九) 命令工具集
- 前台啊,就是这么杂!
- Netflix:当你按下“播放”的时候发生了什么?
- JavaScript在线代码编辑器-技术选型
- Segue区别及视图的切换
- python元组元素的提取_Python 元组
- 互联网思维和项目管理
- ICCV、ECCV、CVPR三大国际会议
- 【FLUENT】【VOF】液滴铺展问题模拟示例
- 第一章 android以及智能手机行业相关简介
- taobao.trades.sold.query( 根据收件人信息查询交易单号 )
- 比尔及梅琳达·盖茨基金会承诺将投入最高1.2亿美元帮助低收入国家获取新冠药物...