一、多图片转gif 转存到输出流
/**
* 多图片转gif 转存到输出流
*
* @param imageList
* @param os
* @throws IOException
*/
private static void imagesToGif(List<BufferedImage> imageList, OutputStream os) {
// 拆分一帧一帧的压缩之后合成
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start(os);
encoder.setRepeat(0);
for (BufferedImage bufferedImage :
imageList) {
encoder.setDelay(1000);
int height = bufferedImage.getHeight();
int width = bufferedImage.getWidth();
BufferedImage zoomImage = new BufferedImage(width, height, 3);
Image image = bufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
Graphics gc = zoomImage.getGraphics();
gc.setColor(Color.WHITE);
gc.drawImage(image, 0, 0, null);
encoder.addFrame(zoomImage);
}
encoder.finish();
}
二、多图片转gif 转存到具体输出路径输出
/**
* 多图片转gif
* @param imageList
* @param outputPath
* @throws IOException
*/
public static void imagesToGif(List<BufferedImage> imageList, String outputPath) throws IOException {
// 拆分一帧一帧的压缩之后合成
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start(outputPath);
encoder.setRepeat(0);
for (BufferedImage bufferedImage :
imageList) {
encoder.setDelay(200);
int height = bufferedImage.getHeight();
int width = bufferedImage.getWidth();
BufferedImage zoomImage = new BufferedImage(width, height, 3);
Image image = bufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
Graphics gc = zoomImage.getGraphics();
gc.setColor(Color.WHITE);
gc.drawImage(image, 0, 0, null);
encoder.addFrame(zoomImage);
}
encoder.finish();
File outFile = new File(outputPath);
BufferedImage image = ImageIO.read(outFile);
ImageIO.write(image, outFile.getName(), outFile);
}
三、测试
public static void main(String[] args) {
try {
List<BufferedImage> bufferedImages = new ArrayList<>();
BufferedImage read1 = ImageIO.read(new FileInputStream("C:\\Users\\cw\\Desktop\\1.png"));
BufferedImage read2 = ImageIO.read(new FileInputStream("C:\\Users\\cw\\Desktop\\2.png"));
BufferedImage read3 = ImageIO.read(new FileInputStream("C:\\Users\\cw\\Desktop\\3.png"));
BufferedImage read4 = ImageIO.read(new FileInputStream("C:\\Users\\cw\\Desktop\\4.png"));
BufferedImage read5 = ImageIO.read(new FileInputStream("C:\\Users\\cw\\Desktop\\5.png"));
bufferedImages.add(read1);
bufferedImages.add(read2);
bufferedImages.add(read3);
bufferedImages.add(read4);
bufferedImages.add(read5);
// imagesToGif(bufferedImages,"C:\\Users\\cw\\Desktop\\test.gif");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
imagesToGif(bufferedImages, outputStream);
// 输出流转输入流 -> 可作为输入流上传到具体队形存储或其它位置存储
// ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray());
FileOutputStream fps1 = new FileOutputStream("C:\\Users\\cw\\Desktop\\test1.gif", false);
fps1.write(outputStream.toByteArray());
fps1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
参考文章:
https://blog.youkuaiyun.com/haopingping_88/article/details/126291679
https://blog.youkuaiyun.com/qq_50910495/article/details/122131659