分享一个IDL写GIF的方法
发布时间: 2014-01-17
所属分类: IDL修炼秘籍
之前做图的时候,经常要做动态的GIF图,通常情况下我会借助第三方软件(例如:Photoshop)等等来做。今天一个偶然的发现,在IDL中可以直接写入GIF图片,并且测试了一下,效果很是不错,这里共享下代码。
全部代码
PRO create_gif_animation,in_filenamelist, outfname, delay_time
COMPILE_OPT IDL2
;Get the number of input files.
file_nums = N_ELEMENTS(in_filenamelist)
IF (file_nums GT 0) AND ~STRCMP(in_filenamelist[0], '') THEN BEGIN
FOR i = 0, file_nums - 1 DO BEGIN
img = READ_IMAGE(in_filenamelist[i], red, green, blue)
;Get the size information.
img_s = SIZE(img)
;If the dimension of the img is 3-D, then convert it to a index image first.
IF (img_s[0] EQ 3) THEN BEGIN
img_idx = COLOR_QUAN(img[0, *, *], img[1, *, *], img[2, *, *], tbl_r, tbl_g, tbl_b)
;Reverse array in the second dimension.
img_idx = REFORM(img_idx)
WRITE_GIF, outfname, img_idx, tbl_r, tbl_g, tbl_b, $
DELAY_TIME = delay_time, /MULTIPLE, REPEAT_COUNT = 0
ENDIF
;If the dimension of the img is 2-D, then write it to the gif file directly.
IF (img_s[0] EQ 2) THEN BEGIN
img = REFORM(img)
IF (N_ELEMENTS(red) GT 0) AND (N_ELEMENTS(green) GT 0) AND (N_ELEMENTS(blue) GT 0) THEN BEGIN
WRITE_GIF, outfname, img, red, green, blue, DELAY_TIME = delay_time, /MULTIPLE, REPEAT_COUNT = 0
ENDIF
ENDIF
ENDFOR
;Close the file.
WRITE_GIF, outfname, /CLOSE
ENDIF
END
方便起见,这里直接将这个方法封装成了一个过程,关于过程和函数的区别以及使用方法,你可以参考这篇文章:IDL中的函数和过程。
in_filenamelist:代表整个GIF数组,每张图片就是其中的一维
outfname:输出文件的完整路径+文件名,例如:D:\a.gif
delay_time:每张图片播放的间隔时间
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子
上一篇:IDL中的函数和过程
下一篇:IDL保存图像(对象图形法)
楼主能不能详细点呀。
不能只有代码呀,对于初学者来说,难的,
要多详细,需要把什么是GIF也说说么?
感谢!很有帮助