java实现对gif与jpg之间的相互转化
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List;
import javax.imageio.ImageIO; import javax.imageio.stream.FileImageInputStream;
import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class jpgToGif {
/** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //jpgToGif(); gifTojpg(); } /* * 将JPG图片转层gif动画 * */ public static void jpgToGif(){ try{ BufferedImage src = ImageIO.read(new File("c:/1.jpg")); // 读入文件 BufferedImage src1 = ImageIO.read(new File("c:/2.jpg")); // 读入文件 BufferedImage src2 = ImageIO.read(new File("c:/3.jpg")); // 读入文件 AnimatedGifEncoder e = new AnimatedGifEncoder(); e.setRepeat(0); e.start("c:/laoma.gif"); e.setDelay(100); // 1 frame per sec e.addFrame(src); e.setDelay(1000); e.addFrame(src1); e.setDelay(100); e.addFrame(src2); e.finish(); }catch(IOException e){ e.printStackTrace(); } } /* * 将GIF转JPG * */
private synchronized static void gifTojpg() throws IOException { GifDecoder decoder = new GifDecoder(); InputStream is = new FileInputStream("c:/bb.gif"); if(decoder.read(is) != 0){ System.out.println("读取有错误"); return ; } is.close(); System.out.println(" 帧是数量: "+decoder.frameCount); for(int i=0;i<decoder.frameCount;i++){ BufferedImage frame = decoder.getFrame(i); int delay = decoder.getDelay(i); System.out.println("延迟时间: "+delay); OutputStream out = new FileOutputStream("c:/"+i+"bb.jpg"); ImageIO.write(frame, "jpeg", out);//将frame 按jpeg格式 写入out中 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); out.flush(); out.close(); } System.out.println("gif to jpg"); }
}
在导入如下两个类 import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; 系统可以报错。解决的方法为,菜单栏window->preference->java->compiler->Errors/Warning->Deprecated and restricted API->Forbidden reference(access rules),将Error选择Warning即可。
