jpg与gif的互换(使用ImageIO代替JPEGImageEncoder)
要实现依赖于 animated-gif-lib-1.2.jar
gif转jpg
public synchronized static void toJpg(String gifName) throws IOException { /** * 在GIF的拆分和组装使用了animated_gif_jar工具包 * 主要类是 gifdecoder * "E:/desk/Desktop/0805_3.gif" */ GifDecoder decoder = new GifDecoder(); InputStream is = new FileInputStream(gifName); if(decoder.read(is) != 0) { System.out.println("读取有误"); return; } is.close(); System.out.println("帧的数量"+ decoder.getFrameCount()); for(int i = 0; i < decoder.getFrameCount();i++) { BufferedImage frame = decoder.getFrame(i); int delay = decoder.getDelay(i); System.out.println("延迟时间"+ delay); OutputStream out = new FileOutputStream("E:/desk/Desktop/giffer/" + i + "g.jpg"); ImageIO.write(frame, "png", out); out.flush(); out.close(); }
}
jpg转gif
public static void toGif(String path) throws IOException { try { int count = new File("E:/desk/Desktop/giffer").list().length; System.out.println(count); ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream(); BufferedImage[] src = new BufferedImage[count]; AnimatedGifEncoder encoder = new AnimatedGifEncoder(); encoder.setRepeat(0); encoder.start(outputStream2); for(int i = 0;i < count;i++) { encoder.setDelay(50); src[ i ] = ImageIO.read(new File("E:/desk/Desktop/giffer/"+ i +"g.jpg")); encoder.addFrame(src[i]); } encoder.finish(); System.out.println(count); File file = new File("E:/desk/Desktop/conn/1.gif"); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] bytearray = outputStream2.toByteArray(); fileOutputStream.write(bytearray); fileOutputStream.flush(); }catch(Exception e) { System.out.println( "jpgToGif Failed:"); e.printStackTrace(); } } }
“`