大家做影像管理方面的业务,一定会需要针对影像生成快视图、拇指图,代码方面用的最多的应该是GDAL库了,其实如果安装了ENVI,利用IDL生成的话也很方便。下面我就测试数据(GF2(高分二号)影像)生成了快视图和拇指图,主要函数就是 stretch_doit、congrid。其中,快视图最大尺寸1024,拇指图最大尺寸128,影像按照321波段真彩色进行拉伸显示,输出格式为jpg,大家可以按照自己的业务自行设定。
Pro ResizeImg
COMPILE_OPT idl2
envi,/restore_base_save_files
envi_batch_init
imgFile='E:\Data\GF2\GF2_PMS2_E118.8_N32.0_20161103_L1A0001935273\GF2_PMS2_E118.8_N32.0_20161103_L1A0001935273-MSS2.tiff'
quickFile='D:\Temp1\QuickView\quick.jpg'
thumbFile='D:\Temp1\QuickView\thumb.jpg'
;设定快视图与拇指图的最大尺寸
quickSize=1024
thumbSize=128
;打开影像文件
envi_open_file,imgFile,r_fid=fid
if fid eq -1 then begin
envi_batch_exit
return
endif
;查询文件信息
envi_file_query,fid,ns=ns,nl=nl,nb=nb,dims=dims
;采用3、2、1 波段组合
pos=[2,1,0]
;对影像进行对比度拉伸
envi_doit,'stretch_doit',fid=fid,dims=dims,pos=pos,$
r_fid=fid_stretched,/in_memory,method=1,out_dt=1,$
range_by=0,i_min=2.0,i_max=98.0,out_min=0,out_max=255
;定义输出影像数组
img=bytarr(3,ns,nl)
;对数组进行赋值
for i=0,2 do begin
img[i,*,*]=envi_get_data(fid=fid_stretched,dims=dims,pos=i)
endfor
;保持图像缩放比
if ns GE nl then begin
quickX = quickSize
thumbX = thumbSize
quickY= fix(float(nl/(ns/quickSize)))
thumbY = fix(float(nl/(ns/thumbSize)))
endif else begin
quickX = fix(float(ns/(nl/quickSize)))
thumbX = fix(float(ns/(nl/thumbSize)))
quickY = quickSize
thumbY = thumbSize
endelse
;输出快视图
quickImg = CONGRID(img,3,quickX, quickY, /INTERP)
write_image,quickFile,'JPEG',quickImg,/order
;输出拇指图
thumbImg = CONGRID(img,3,thumbX, thumbY, /INTERP)
write_image,thumbFile,'JPEG',thumbImg,/order
end