做项目的时候遇到了一个问题,一个三维的图形,保存为tiff格式,每一页都是一张图片,用Image读取的时候,只能读取第一页的数据,不能读取全部的数据,去网上搜索的答案,需要安装其他包,感觉很麻烦。于是去plt帮助文档中,找到了读取全部页数的方法。
第一种方法通过遍历指定页数的方法输出图片。
from PIL import Image
img = Image.open("digital.tif")
for i in range(4): #可以用img.n_frames来得到总页数
img.seek(i) #是否存在
img.show()
except EOFError: #页数读完了
break
第二种方法,利用plt自带的遍历函数
from PIL import Image, ImageSequence
img = Image.open("digital.tif")
for i, page in enumerate(ImageSequence.Iterator(img)):
page.show()
平时在处理的时候多是把图像变成array,可以通过以下函数来实现。
from PIL import Image
import numpy as np
def tifread(path):
img = Image.open(path)
images = []
for i in range(img.n_frames):
img.seek(i)
images.append(np.array(img))
return np.array(images)
imarray = tifread('digital.tiff')
举个小栗子
from PIL import Image
import numpy as np
def tiffread(path):
img = Image.open(path)
images = []
for i in range(img.n_frames):
img.seek(i)
images.append(np.array(img))
return np.array(images)
imarray=tiffread('digital.tif')
imarray.shape #输出(500,500,500)
这里以计算得到的SPEI数据为例,我的计算结果包含了2000-2022年逐月的数据结果,共264个波段,下面代码可以进行波段分离,并按年月进行命名。有时计算的结果常常存储在一个tiff文件中,波段太多,数据较大,查看不方便,将其分离成单波段文件可以便于查看。
数据准备阶段要使shp文件和tiff数据的坐标系一致,这部分在python中做了尝试,发现还是在arcgis中操作更简单快捷。可自行查找arcgis坐标系转换教程。(11条消息) tiff数据python绘图及地图白化(包括arcgis坐标转换操作步骤)资源-CSDN文库。
什么是TIF/TIFF图像?
先说一下其他的图像格式;
JPG/JPEG 是如今最常用的图片格式之一,其优点为兼容性高、传输速度快、内存小。JPG是一种有损压缩方案,可在保持较高图片质量的前提下,被压缩到原图内存的二十分之一大小。
当然,如果是出于对图片高质量的要求,JPG格式的图片依然存在失真的情况,故而无法与PNG或TIF格式相比较.
值得一提的是,在图片编辑中,对于JPG格式的图片,每一次输出都会损失像素质量,因此当我们在用图片
利用python matplotlib模块(python3.7.1)画出的图表暂不支持直接导出.tiff格式的图片,但是可以导出eps, pdf, pgf, png, ps, raw, rgba, svg, svgz格式的图像。论文写作中经常需要用到.tiff格式等的高质量图像,这里借助Adobe Acrobat Pro软件将matplotlib导出的图像转换为.tiff格式。
首先利用matplotlib模块导出.pdf格式的文件,
plt.savefig('t1.pdf')
然后通过A