分享一个IDL写GIF的方法

本文目录
  • 正文

之前做图的时候,经常要做动态的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:每张图片播放的间隔时间

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

已有 3 条评论

  1. GS
    1#
    GS  · 2017-11-14 13:06

    楼主能不能详细点呀。

  2. GS
    2#
    GS  · 2017-11-14 13:08

    不能只有代码呀,对于初学者来说,难的,

      1. Sailor
        Sailor  · 2017-11-14 14:25

        要多详细,需要把什么是GIF也说说么?

发表评论