将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包)后运行的情况。