将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版本。
有时间再测试下:
- 在windows环境下是否是这样的问题;
- 在ubuntu inux环境下手工编译(目前使用的是ubuntu的deb包)后运行的情况。