该帖已经被评为良好帖
|
|||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||||||
发表时间:2009-01-11
关于PIL库的一些概念
在RGB模式下,每个图片由三个通道叠加而成,每个模式下为一个灰度图,当有一个调色板来调色的时候,这三张灰度图的叠加即可合成3*8位(每个像素)的一个真彩图片。pil库中,图片之间的模式(mode)可以转化。下面给出一些简单的例子,例子中的所有图片均来自于国家地理的官网,为了使得文档比较短小,每个图片均使用Pil缩放成1/2大小,如有侵权嫌疑,请尽快联系,我会删除这些图片。
im = Image.open('filename')
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两个通道进行翻转。 红色通道的灰度图
几何转变 out = img.resize((128, 128))#resize成128*128像素大小。 out = img.rotate(45)#逆时针旋转45度 逆时针45度
transpose()方法预定义了一些旋转方式,如
import ImageFilter out = im.filter(ImageFilter.DETAIL)
out = img.point(lambda i : i * 1.2)#注意这里用到一个匿名函数(那个可以把i的1.2倍返回的函数)
如上边的那个例子,我们可以将一个RGB模式的图分离成三个通道的层 r,g,b = img.split()#神奇而又强大的python语法
import ImageEnhance enh = ImageEnhance.Contrast(im) enh.ehhance(1.5).show("50% more contrast")
读写图片的更多方式 fp = open("file.jpg", "rb") im = Image.open(fp)
甚至,你可以从一个字符串中读出图片数据来(python真是神奇啊)。 import StringIO img = Image.open(StringIO.StringIO(buffer))
当然,PIL的功能远不止这些,由于篇幅原因,我这次先写这么多吧,后面会给出PIL中各个模块中函数的详细使用说明,同时尽量配以实图来说明。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-12
|
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-12
写得不错,不过这部分代码似乎有点问题:
import ImageEnhance enh = ImageEnhance.Contrast(im) enh.ehhance(1.5).show("50% more contrast") |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-12
[quote="jinhao7773"]写得不错,不过这部分代码似乎有点问题: enh = ImageEnhance.Contrast(im) im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。 |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-12
abruzzi 写道
[quote="jinhao7773"]写得不错,不过这部分代码似乎有点问题: enh = ImageEnhance.Contrast(im) im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。 enh.ehhance(1.5).show("50% more contrast") 这句话错了。 应该是 enh.enhance(1.5).show("50% more contrast") |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-12
写得通俗易懂,赞一个
|
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-13
前一段也学过一点pil,不过还是不太会用.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗? 前提是要能在旋转或翻转的情况下保持图片的透明度. 我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来. 图片转成PNG8后透明就没了,如果楼主试过,还请赐教. |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-13
yingwuhahahaha 写道 前一段也学过一点pil,不过还是不太会用.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗? 前提是要能在旋转或翻转的情况下保持图片的透明度. 我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来. 图片转成PNG8后透明就没了,如果楼主试过,还请赐教. 赐教两字,愧不敢当。呵呵 IE只支持PNG8的index色彩透明度,不支持alpha透明。可能你遇到的问题是这个原因。IE6怎么还在用?V7已经是正式版了。我一直在FF下工作,对IE还真是不太清楚。 |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-19
abruzzi 写道 yingwuhahahaha 写道 前一段也学过一点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还是不透明. |
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
发表时间:2009-01-22
好文章,强烈期待后续作品!
|
|||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||
浏览 20965 次