- 浏览: 452457 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
进退取舍:
谢谢,这个用上了!!
Java 一个线程池的示例 -
pb_water:
感谢楼主,打算买楼主的书,支持一下,楼主功德无量
JavaScript内核系列第0版整理稿下载 -
lancezhcj:
有图会直观的多呢,再摸索摸索
有限自动机与建模 -
hsmsyy:
这里应该是原创了吧,楼主我觉得闭包的作用:实现面向对象。有待商 ...
JavaScript内核系列 第7章 闭包 -
wll52:
在应用退出之前,需要释放连接 con.disconnect() ...
使用smack与GTalk通信
关于PIL库的一些概念
pil能处理的图片类型
pil可以处理光栅图片(像素数据组成的的块)。
通道
一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加
模式
1 | 1位像素,黑和白,存成8位的像素 |
L | 8位像素,黑白 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3×8位像素,真彩 |
RGBA | 4×8位像素,真彩+透明通道 |
CMYK | 4×8位像素,颜色隔离 |
YCbCr | 3×8位像素,彩色视频格式 |
I | 32位整型像素 |
F | 32位浮点型像素 |
尺寸
通过图片对象的size属性可以得到图片的尺寸,结果这是一个二元组,包含水平和垂直方向上的像素数。
坐标
Pil采取左上角为(0,0)的坐标系统
调色板
mode("P")为每个像素定义具体的颜色值
图片信息
可以通过info属性读取一张图片的附加信息,这个与图片的格式有关。
滤镜
在对图片的几何操作中可能会将多个输入像素映射到单个的输出像素,pil提供4种不同的采样滤镜(在目前的版本中,后续的版本可能支持更多)
NEAREST | 最近 |
BILINEAR | 双线型 |
BICUBIC | 双三次插值 |
ANTIALIAS | 平滑 |
在RGB模式下,每个图片由三个通道叠加而成,每个模式下为一个灰度图,当有一个调色板来调色的时候,这三张灰度图的叠加即可合成3*8位(每个像素)的一个真彩图片。pil库中,图片之间的模式(mode)可以转化。下面给出一些简单的例子,例子中的所有图片均来自于国家地理的官网,为了使得文档比较短小,每个图片均使用Pil缩放成1/2大小,如有侵权嫌疑,请尽快联系,我会删除这些图片。
所有的图片操作必须有一个操作对象,Pil提供open(filename)进行这个过程
打开图片
1.导入pil的Image模块
2.使用open(filename)打开文件,返回一个image对象
im = Image.open('filename')
此后,一切关于图片的操作均基于这个对象。
打开后,我们可以查看一些图片信息,如im.format, im.size, im.mode等。调用im.show()会在图片查看工具中显示当前操作的image对象,这个跟个人的系统有关系,我系统中默认是用Windows Picture and Fax Viewer打开的。这个方法用来查看临时的图片效果。
读写图片
pil中转换图片格式非常简单(转换图片模式是另一个概念,不要混淆),只需要调用img.save(filename)即可比如有一个bmp(位图)图片,使用img = Image.open('file.bmp')打开后,只需要img.save('file.jpg')即可转换。不过一般情况下,save(filename)是不用做这个用途的,通常,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。
拷贝,粘贴,合并
box = (100,100,500,500)#设置要拷贝的区域 #将im表示的图片对象拷贝到region中,大小为(400*400)像素。这个region可以用来后续的操作(region其实就是一个Image对象),box变量是一个四元组(左,上,右,下)。 region = im.crop(box) region = region.transpose(Image.ROTATE_180)#从字面上就可以看出,先把region中的Image反转180度,然后再放回到region中。 im.paste(region, box)#粘贴box大小的region到原先的图片对象中。
前面说过,每一个RGB都是由三个通道的灰度图叠加的,所以pil提供了将这三个通道分离的方法
r,g,b = im.split()#分割成三个通道 r.show() g.show() b.show() im = Image.merge("RGB", (b, g, r))#将b,r两个通道进行翻转。
红色通道的灰度图
绿色通道的灰度图
蓝色通道的灰度图
互换红蓝通道后的合成图
几何转变
几何转变提供resize,rotate等方法,用以重定义图片大小,对图片进行旋转等操作,在实际应用中比较广泛。
如
out = img.resize((128, 128))#resize成128*128像素大小。 out = img.rotate(45)#逆时针旋转45度
逆时针45度
镜面效果,左右翻转
transpose()方法预定义了一些旋转方式,如
左右反转,上下翻转,逆时针旋转(90,180,270)度等,非常方便,rotate()和transpose()方法在表现上没有任何不同。
图片加强
滤镜
ImageFilter模块提供了很多预定义的图片加强滤镜。
比如一个常用的滤镜,细节(detail滤镜)
import ImageFilter out = im.filter(ImageFilter.DETAIL)
直接操作像素点
不但可以对每个像素点进行操作,而且,每一个通道都可以独立的进行操作。比如,将每个像素点的亮度(不知道有没有更专业的词)增大20%
out = img.point(lambda i : i * 1.2)#注意这里用到一个匿名函数(那个可以把i的1.2倍返回的函数)
对每个点都做20%的增强
如上边的那个例子,我们可以将一个RGB模式的图分离成三个通道的层
r,g,b = img.split()#神奇而又强大的python语法
然后对一个通道进行加强或减弱操作,完成后我们又可以使用Merge将通道合并,从而改变图片的色调(冷暖色调的互换)等。
更高级的图片加强,可以使用ImageEnhance模块,其中包含了大量的预定义的图片加强方式。
import ImageEnhance enh = ImageEnhance.Contrast(im) enh.ehhance(1.5).show("50% more contrast")
读写图片的更多方式
通常,我们使用open方法进行图片的打开操作。但是这不是唯一的方式。完全可以跟python的IO整合起来。如
fp = open("file.jpg", "rb") im = Image.open(fp)
甚至,你可以从一个字符串中读出图片数据来(python真是神奇啊)。
import StringIO img = Image.open(StringIO.StringIO(buffer))
(文中很多内容来自pil的handbook,但是原手册比较学院派,没有一张图片来进行说明,因此不免枯燥,我给每个小例子都加上一个真实的图片作为说明,希望看起来不那没抽象。)
当然,PIL的功能远不止这些,由于篇幅原因,我这次先写这么多吧,后面会给出PIL中各个模块中函数的详细使用说明,同时尽量配以实图来说明。
评论
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?
前提是要能在旋转或翻转的情况下保持图片的透明度.
我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.
图片转成PNG8后透明就没了,如果楼主试过,还请赐教.
赐教两字,愧不敢当。呵呵
IE只支持PNG8的index色彩透明度,不支持alpha透明。可能你遇到的问题是这个原因。IE6怎么还在用?V7已经是正式版了。我一直在FF下工作,对IE还真是不太清楚。
恩,我知道IE6只支持8位索引透明色的PNG,所以我想用PIL转成那样的,结果没成功.
需求是客户定的,哎,我自己也不想用IE6.实在不行就手工转gif了.我用PIL把PNG32转成gif还是不透明.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?
前提是要能在旋转或翻转的情况下保持图片的透明度.
我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.
图片转成PNG8后透明就没了,如果楼主试过,还请赐教.
赐教两字,愧不敢当。呵呵
IE只支持PNG8的index色彩透明度,不支持alpha透明。可能你遇到的问题是这个原因。IE6怎么还在用?V7已经是正式版了。我一直在FF下工作,对IE还真是不太清楚。
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?
前提是要能在旋转或翻转的情况下保持图片的透明度.
我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.
图片转成PNG8后透明就没了,如果楼主试过,还请赐教.
<div class='quote_div'>
<p>
<pre name='code' class='python'>enh = ImageEnhance.Contrast(im) </pre>
<p>im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。</p>
</div>
<p>enh.ehhance(1.5).show("50% more contrast") </p>
<p>这句话错了。</p>
<p>应该是</p>
<p>enh.enhance(1.5).show("50% more contrast") </p>
<pre name='code' class='python'>enh = ImageEnhance.Contrast(im) </pre>
<p>im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。</p>
import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.ehhance(1.5).show("50% more contrast")
发表评论
-
JavaScript内核系列 第15章 服务器端的JavaScript
2012-02-12 21:39 2326第15章已经在icodeit上发布,这一章分为上/下两篇,请朋 ... -
使用vim开发python及graphviz绘图
2011-12-23 14:49 6458基本需求 使用vim中的autocmd命令可以很容易的将正在 ... -
Java脚本技术应用实例
2011-01-22 11:24 4269前言 一直以来都很喜欢可以自由扩展的软件,这一点应该已经在很 ... -
可编程计算器(phoc)的设计与实现
2011-01-17 11:34 1983前言 借助JavaScript脚本 ... -
函数式编程(javascirpt)
2009-04-18 22:18 1264前言 Javascript,有人称 ... -
C和指针
2009-05-21 23:15 1117前言 指针是C的灵魂,正是指针使得C存在了这么多年,而且将长 ... -
C和指针(续)
2009-05-25 23:41 1360前言 上一篇《C和指针》可能对关于C和指针的有些内容没有说透 ... -
有限自动机与建模
2009-06-06 10:48 1786前言 在学校学程序设计语言的时候,能接触到的所有例子没有一个 ... -
事件和监听器
2009-06-21 22:06 1438前言 事件监听器是经 ... -
基于总线的消息服务(BBMS)的设计与实现
2009-07-25 22:19 1365前言 异步事件的通知机制在比较有规模的软件设计中必然会有涉及 ... -
JavaScript内核系列 第9章 函数式的Javascript
2010-05-13 19:20 3788第九章 函数式的Javascript 要说Ja ... -
JavaScript内核系列 第8章 面向对象的JavaScript(下)
2010-05-06 09:40 3673接上篇:JavaScript内核系列 第8章 面向对象的Jav ... -
JavaScript内核系列 第8章 面向对象的JavaScript(上)
2010-05-06 09:26 2906第八章 面向对象的 Javascript ... -
JavaScript内核系列 第7章 闭包
2010-05-04 08:48 3874第七章 闭包 闭包向来给包括JavaScript程序 ... -
JavaScript内核系列 第6章 正则表达式
2010-04-27 19:44 4050第六章 正则表达式 正则表达式是对字符串的结构 ... -
JavaScript内核系列 第5章 数组
2010-04-24 15:17 4531第五章 数组 JavaScript的数组也是一个比较 ... -
Swing小应用(Todo-List)之三
2010-04-22 20:47 2136前言 去年9月份开发的那个小工具sTodo,只是做到了能用, ... -
JavaScript内核系列 第4章 函数
2010-04-18 17:31 5095第四章 函数 函数,在C语言之类的过程式语言中 ... -
JavaScript内核系列 第3章 对象与JSON
2010-04-12 09:12 6134第三章 对象与JSON JavaScript对象与传 ... -
JavaScript内核系列 第2章 基本概念
2010-04-03 19:44 5692第二章 基本概念 ...
相关推荐
### Python 图像处理库指南:Python Imaging Library (PIL) #### 一、引言 Python Imaging Library(简称PIL)是Python编程语言中一个强大的图像处理库,它为用户提供了一系列的功能来创建、修改以及转换各种格式...
Python 图像处理库 PIL 介绍 Python Imaging Library(PIL)是 Python 中最常用的图像处理库,目前版本为 1.1.7。PIL 库中一个非常重要的类是 Image 类,通过这个类可以创建实例来直接载入图像文件,读取处理过的...
PIL(Python Imaging Library),也称为Pillow,是Python中最常用的图像处理库之一。ImageGrab作为PIL库中的一个模块,主要用于捕获屏幕图像或将剪贴板内容转换为图像。此模块非常适合进行屏幕捕获操作,并且广泛...
Python第三方图像处理库PIL(Python Imaging Library)是Python编程语言中的一个强大工具,用于处理各种图像文件。它提供了一系列的函数和类,允许开发者进行图像处理、编辑、合成、色彩转换以及基本的图像分析任务...
PIL 库(Python Imaging Library)是一个功能强大的图像处理库,可以用来读取、处理和保存图像。通过使用 PIL 库,我们可以读取图片的像素值并对其进行处理。 读取图片的像素值 使用 PIL 库读取图片的像素值可以...
Python中的PIL(Python Imaging Library)是一个强大的图像处理库,广泛应用于图像的读取、编辑和创建。目前的稳定版本是1.1.7,你可以从官方或相关资源网站下载并获取更多的学习材料。 1. **Image类**: PIL库的...
PythonWare 公司提供了免费的图像处理工具包 PIL(Python Image Library),该软件包提供了基本的图像处理功能,如改变图像大小、旋转图像、图像格式转换、色场空间转换、图像增强、直方图处理、插值和滤波等等。...
Python中最常用的图像处理库有PIL(Python Imaging Library)及其分支Pillow、OpenCV、matplotlib和scikit-image。其中,Pillow是最广泛使用的库,它提供了一个简单的接口来处理图像,支持多种图像文件格式。OpenCV...
在Python中处理图像时,PIL库提供了一些核心类,例如Image用于加载和处理图像,以及ImageFilter用于应用滤镜效果。以下是一些基本操作示例: ```python from PIL import Image # 打开一个图像文件 img = Image.open...
首先,PIL(Python Imaging Library)是Python中最早的图像处理库,它提供了广泛的图像处理功能,如打开、保存、显示图像,以及调整尺寸、旋转、裁剪等。在"python图形处理11"中,可能会介绍如何使用PIL处理复杂的...
PIL(Python Imaging Library)是Python的一个图像处理库,它提供了大量的图像处理功能,包括打开、修改、保存多种图像文件格式,以及进行色彩转换、图像裁剪、旋转、滤波等操作。在Python 2.7版本中,PIL是进行图像...
PIL(Python Imaging Library)是Python的一个重要图像处理库,提供了丰富的功能,包括读取、操作和保存多种图像文件格式。本教程将详细讲解如何使用Python的PIL库将一张照片切分为9张等大小的小图。 首先,确保你...
Python的PIL库,全称为Python Imaging Library,是Python中用于图像处理的核心库。它提供了大量的功能,包括读取、操作和保存各种图像文件格式,以及进行色彩转换、图像滤波、几何变换等图像处理任务。PIL库是Python...
PIL(Python Imaging Library)是Python的一个图像处理库,它提供了大量的图像处理功能,包括打开、操作和保存多种文件格式。在Mac操作系统上使用Python PIL库,用户可以进行图片的裁剪、旋转、颜色转换、滤镜应用等...
Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
在Python的图像处理领域,PIL(Python Imaging Library)是一个不可或缺的工具,它提供了丰富的功能,包括图像读取、修改和保存等。本文将深入探讨如何利用PIL库进行图像格式转换,以及如何通过convert()函数改变...