PIL中对数据的写入用的是paste,
1 >>> help(im.paste)
2 Help on method paste in module Image:
3
4 paste(self, im, box=None, mask=None) method of TiffImagePlugin.TiffImageFile ins
5 tance
6 Paste other image into region
7
8 >>>
手册里的解释更多。但差不多的解释就是把im的数据贴到所属对象的box框里。
好了。既然上面验证了两个库中读取的数据二进制一样,那么就可以互相交换数据了。可以把gdal的数据读出,贴到pil打开的数据中,也可以把PIL的数据读出,贴到gdal打开的数据中,尽情地干点偷梁换柱,移花接木的勾当(这个我拿手:-))。
在PIL中还有一个很好的东东--fromstring
1 >>> help(Image.fromstring)
2 Help on function fromstring in module Image:
3
4 fromstring(mode, size, data, decoder_name='raw', *args)
5 Load image from string
6
7 >>>
更多的要去看手册14和16页。Image本身有一个,im(Image打开的对象)也有一个。好用啊!!!创建一个空数据,然后用个fromstring,然后保存,就是一张新图!保存一下刚才那个10*10的图,看看是什么……
1 >>> newim = Image.new("RGB",(10,10))
2 >>> newim.fromstring(datas.tostring())
3 >>> newim.save("f:/png/new.png","png")
4 >>>
另一种:
1 >>> Image.fromstring("RGB",(10,10),datas.tostring()).save("f:/png/new1.png","p
2 ng")
3 >>>
哈,只要一行!
我喜欢PIL的保存!真是太方便啦!
这么简单的方法,要把GeoTiff转出其他常见格式(不考虑空间信息的时候),就不要用gdal的创建方法了(真是太麻烦了!)用PIL的fromstring再save一下就好了,也不用创建驱动,然后区分Creat和CreateCopy的方式等等步骤,gdal就这点不好……不过如果要转出遥感特殊格式,比如hdf4啊什么的,或者转出的波段比RGB多,还是用gdal的好了。
当然,这里尤其需要注意两个库默认读写哲学的不同。必要的时候要数组转换,或者打开PIL的编码方式。不然转出的东西就不是个东西了。
2. 反馈
如果您发现我写的东西中有问题,或者您对我写的东西有意见,请一定要发邮件跟我讲,Email( linux_23@163.com )