python, Image
PIL: Python Image Library, python平台的图像处理库,要使用Image首先要从PIL库导入Image:
from PIL import Image
如果没有安装PIL的包,导入会出错。所以要先安装包
PIL:Python Imaging Library(仅支持到python2.7)
Pillow:支持最新的Python 3.*
Python3.*的版本直接安装Pillow:pip install Pillow
Image是PIL下的一个类,具体的使用如下:
from PIL import Image
# 读取图片
im = Image.open(r''D:\kolor.jpg'')
#查看图片信息
im.format, im.size, im.mode
# 显示图片
im.show()
# 保存图片, 参数:保存的地址和名称,图片格式
im.save(r'D:\kolor.jpg', 'JPEG')
#创建新图片
im=Image.new(mode, size) # color的默认值是黑色
im=Image.new(mode, size, color)
如: im=Image.new('RGB', (450, 600), (255,255,255)) # 'RGB'是红(RED)绿(GREEN)蓝(BLUE)模式
#两张图片相加
Image.blend(im1, im2, alpha) # alpha是im1和im2的比例参数
#点操作
im.point(function) # function接收一个参数,并对图片的每个点执行这个函数
如:im.point(lambad i: i*1.5) #对每个点进行50%的加强
#图片裁剪
box=(100,100,500,500) # 设置要裁剪的区域
region=im.crop(box)
#图片黏贴
im.paste(im1, box) #把im1的box区域黏贴到im中去
#通道分离
r,g,b=im.split() #分割成三个通道,此时r,g,b分别是三个图像对象
#通道合并
im=Image.merge('RGB', (b,g,r)) #将b, r两个通道进行反转
#改变图片的大小
im.resize((128,128))
#缩小图片
im.thumbnail(())
im.thumbnail((w//2, h//2)) # 缩小50%
#旋转图像
im.rotate(45) #逆时针旋转45度
im.transpose(Image.ROTATE_180)
im.transpose(Image.FLIP_LEFT_RIGHT) #左右兑换
im.transpose(Image.FLIP_TOP_BOTTOM) #上下对换
#图像mode转换
im.convert('RGBA') #图像的mode转换成RGBA类型
#写某个像素位置的值
im.putpixel((4,4), (255,0,0))
#加滤镜
im.filter(ImageFilter.BLUE)
以下是Image对象的全部方法:
| save(f,format=None) | 保存 | 如果f是一个file对象,必须指定format(format codes) |
| convert(mode) | 转换mode | |
| copy() | ||
| crop(bbox) | 剪切 | 原图中bbox区域 |
| filter(name) | 滤镜 | the name of predefined image enhancement filters 滤镜名字需要import ImageFilter |
| getbands() | 通道的字符串序列 | 如RGB图返回('R', 'G', 'B') |
| getbbox() | 包含非零区域的最小bbox | |
| getextrema() | 最大最小像素点值 | min&max pixel value 单通道图:返回元组(min,max) 多通道图:返回各个通道的元组组成的元组 |
| getpixel(xy) | 取像素点值 | 坐标xy处的pixel value or a sequence of pixel values |
| histogram(mask=None) |
统计直方图 |
单通道图:返回列表[c0, c1, ...],ci是值为i的像素数 多通道图:a single sequence that is the concatenation of the sequences for all bands mask参数:a same-sized mask image of mode "1" or "L"(include only those pixels correspond to nonzero pixels in the mask argument) |
| offset(dx,dy=None) |
平移 |
Returns a new image the same size as the original, but with all pixels rotated dx in the +x direction,and dy in the +y direction. If dy is omitted, it defaults to the same value as dx. |
| paste(i2,where,mask=None) | 粘贴图片 | where参数可以是 1 (x,y)坐标对:i2的像素点(0,0)对齐原图中的(x,y)粘贴,i2超过原图边界的部分被抛弃 2 bbox:i2必须和该bounding box大小一致 3 None:i2必须和原图大小一致 如果i2的mode和原图不一致,粘贴前会被转换。 mask参数:a same-sized mask image of mode "1","L" or “RGBA ”(control which pixels get replaced) |
| paste(color,box=None,mask=None) | 填充颜色 | 如果box省略,整个图被填充为color色;mask参数同上 |
| point(function) | 改变像素点(函数) | Returns a new image with each pixel modified. |
| point(table) | 改变像素点(查表) | To translate pixels using a table(a sequence of 256n values, where n is the number of bands in the image) lookup |
| putalpha(band) |
改变alpha通道 |
The pixels of the band image(same-sized,"L" or "1") replace the alpha band(A) of the original image(RGBA) in place. |
| putpixel(xy, color) | 改变单个像素点颜色 | Note that this method is relatively slow. For more extensive changes, use paste or theImageDraw module instead. |
| resize(size,filter=None) | 调整大小 | |
| rotate(theta) |
旋转(围绕图片中心) |
Any pixels that are not covered by rotation of the original image are set to black. |
| show() |
显示图片 |
On Unix systems, this method runs the xv image viewer to display the image. |
| split() |
分离通道 |
返回各个通道的灰度图组成的元组 |
| thumbnail(size,filter=None) | 缩略图 | Modifies in-place,Preserves aspect ratio |
| transform(xs, ys, Image.EXTENT, (x0,y0,x1,y1)) |
Returns a transformed copy of the image. In the transformed image, the point originally at (x0,y0) will appear at (0,0), and point (x1,y1) will appear at (xs, ys). |
|
| transform(xs, ys, Image.AFFINE, (a,b,c,d,e,f)) | affine变换 |
The values a through f are the first two rows of an affine transform matrix. |
| transpose(method) | 翻转旋转 | ROTATE_90/180/270(clockwise), FLIP_TOP_BOTTOM(horizontal), FLIP_RIGHT_LEFT(vertical) |
python, Image的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
随机推荐
- java笔记 -- java变量与常量的声明
变量: 在Java中, 每一个变量属于一种类型. double salary int vacationDays; long earthPopulation; boolean done; 命名: 以字母 ...
- 使用mpvue开发小程序
前言: 最近接到小程序的开发需求,由于之前也没开发过小程序,心情还是有点激动.先花15分钟看一遍小程序官方文档,再花10分钟看一遍mpvue官方文档,然后拿着原型图和UI图就开干.踩了不少坑,写篇博客 ...
- Django 修改视图文件(views.py)并加载Django模块 + 利用render_to_response()简化加载模块 +locals()
修改视图代码,让它使用 Django 模板加载功能而不是对模板路径硬编码.返回 current_datetime 视图,进行如下修改: from django.template.loader impo ...
- Redis入门指南之三(入门)
本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...
- 5种网络IO模型(有图,很清楚)
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- GoEasy的使用
GoEasy介绍 http请求短连接,一次请求响应后关闭,而GoEasy建立了客户端与服务器之间的长连接. goeasy支持服务器到客户端的消息发布,客户端到客户端的消息发布 GoEasy用来做什么 ...
- Mac安装brew(遇到的坑)
1.安装方法: 网上都会有 命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i ...
- C# 语句中的各种单例模式代码
1.非线程安全(经典模式),但没有考虑线程安全,在多线程时可能会出问题,不过还从没看过出错的现象. /// <summary> /// 单例模式的实现 /// </summary&g ...
- nopcommerce 4.1 学习2 -插件之挂件
先了解下nop4.1的一些插件有哪些类型: 1.支付插件 Nop.Plugin.Payments.PayPalStandard Nop.Plugin.Payments.CheckMoneyOrd ...
- traceroute命令初探
一.学习目标 了解traceroute基本概念 了解traceroute工作原理及详细过程 熟悉traceroute常用命令 一些注意点 二.traceroute基本概念 traceroute (Wi ...