PIL学习笔记
2016-03-17 16:17
507 查看
from PIL import Image from PIL import ImageFilter from PIL import ImageEnhance from io import StringIO def learn(): # 打开本地文件 im = Image.open("1.jpg") print(type(im)) print(im.format, im.size, im.mode) # 调用xv显示图片,有很多缺陷 im.show() # 保存文件,需要指定文件后缀 im.save("1.png") # 生成缩略图 size = (100, 100) im.thumbnail(size) im.save("1.thumbnail", "JPEG") # 剪切图片 im = Image.open("screen.png") box = (0, 0, 640, 480) region = im.crop(box) region.save("screen-crop.jpg") # 变换图片,比如选择180° im = Image.open("screen.png") im = im.transpose(Image.ROTATE_180) im.show() # 粘贴图片,注意被粘贴的图片大小和粘贴区域大小要吻合 im = Image.open("screen.png") box = (0, 0, 400, 400) region = im.crop(box) im.paste(region, box) im.show() # 分离颜色通道,合并颜色通道 im = Image.open("1.jpg") r, g, b = im.split() r.show() im = Image.merge("RGB", (b, g, r)) im.show() # 改变图片大小,逆时针选择图片 im = Image.open("1.jpg") out = im.resize((100, 100)) out.show() out = im.rotate(45) out.show() # 另一种旋转图片,可以设置图片按垂直或水平线翻转 im = Image.open("1.jpg") out = im.transpose(Image.FLIP_LEFT_RIGHT) out.show() out = im.transpose(Image.FLIP_TOP_BOTTOM) out.show() out = im.transpose(Image.ROTATE_90) out.show() out = im.transpose(Image.ROTATE_180) out.show() # convert 函数改变图片格式 im = Image.open("1.ppm").convert("L") # 图片滤镜效果 im = Image.open("1.jpg") out = im.filter(ImageFilter.DETAIL) out.show() # 图片点操作,改变图片亮度 im = Image.open("1.jpg") out = im.point(lambda i: i * 5) out.show() # ImageEnhance模块用来改变图片对比度、亮度、色彩平衡、锐化度等属性 im = Image.open("1.jpg") enh = ImageEnhance.Contrast(im) enh.enhance(1.3).show("30% more contrast") # PIL能够处理动画图片,FLI/FLC/GIF/... im = Image.open("a.gif") # 跳到第2帧 im.seek(1) try: while 1: im.seek(im.tell() + 1) im.show() except EOFError: pass def roll(image, delta): "Roll an image sideways" xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize - delta, ysize)) image.paste(part1, (xsize - delta, 0, xsize, ysize)) return image def chang_bands(): "大致操作相当于选择红色通道后做反选,然后保持选区在绿色通道调低亮度" im = Image.open("1.jpg") source = im.split() R, G, B = 0, 1, 2 # 很有趣的功能,屏蔽红色通道里亮度大于120的点。类似PS做出的阈值操作,结果是通道里非0即255 mask = source[R].point(lambda i: i < 120 and 255) mask.show() # 降低绿色通道的亮度 # source[G].show() out = source[G].point(lambda i: i * 0.5) # out.show() # 进行屏蔽粘贴,这里mask意义为:值为255的点显示,值为0的点屏蔽 source[G].paste(out, None, mask) # source[G].show() im = Image.merge(im.mode, source) # im.show() class ImageSequence: '一个用来遍历动画文件帧的类' def __init__(self, im): self.im = im def __getitem__(self, ix): try: if ix: self.im.seek(ix) return self.im except EOFError: raise IndexError # end of sequence def loop_sequence(): im = Image.open("a.gif") for frame in ImageSequence(im): print(frame.format) def from_file(): '通过打开文件获得图片对象' fp=open("1.jpg","rb") im=Image.open(fp) im.show() def from_string(): '从string中获得图片(官方示例为StringIO.StringIO,但当前版本已经改为io.StringIO' im=Image.open(StringIO(buffer)) def from_tar(): '从压缩文件中获得图片' from PIL import TarIO fp=TarIO.TarIO("Imaging.tar","Imaging/test/lena.ppm") im=Image.open(fp)
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法