java实现图片合成gif图——输出到具体路径或流数据上传

一、多图片转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.csdn.net/haopingping_88/article/details/126291679
https://blog.csdn.net/qq_50910495/article/details/122131659

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值