使用jmagick做gif动画的缩略图

将gif动画生成缩略图,有一个难点,就是gif动画应该是多帧的。如果按照普通图进行缩小,比如直接调用如下语句(见在java环境中使用imagemagick):

image=image.scaleImage(60, 60);

只能得到第一帧的缩略图,这样就不是动画了。

需要如下调用才可生成保持动画的缩略图。

import magick.*;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args )throws Exception
    {
        MagickImage image = new MagickImage( new ImageInfo( "/home/ubuntu/10261.gif" ) );
        MagickImage[] images=image.breakFrames();
        for(int i=0;i<images.length;i++){
                images[i]=images[i].scaleImage(64,64);
        }
        image=new MagickImage(images);
        image.setImageAttribute( "Dispose","1" );
        image.setImageAttribute( "Delay","30" );
        image.setFileName("/home/ubuntu/r40.gif");
        image.writeImage(new ImageInfo());
    }
}

 面代码的基本思路就是,将gif的各帧分别生成缩略图,再合成为gif格式的图。当遇到比较大的gif动画时,过程会比较慢。

不过,在我这里的环境下,生成的gif图无法在ie浏览器播放,只能显示静态的第一帧图像。而在其他浏览器和图片查看器中,可以正常播放。

怀疑是jmagick版本问题,这里使用的是jmagick6-6.2.6-0版本。

有时间再测试下:

  1. 在windows环境下是否是这样的问题;
  2. 在ubuntu inux环境下手工编译(目前使用的是ubuntu的deb包)后运行的情况。

猜你喜欢

转载自san-yun.iteye.com/blog/1835390