Я хочу объединить несколько изображений в GIF. Я выбрал ffmpeg. Я узнал, что в Java есть бинарные зависимости, включая FFMPEG, поэтому я выбрал javacv < /p>
Во -первых, я добавил зависимость javacv в мой файл POM : < /p>
org.bytedeco
javacv-platform
1.5.11
< /code>
Затем я написал код для синтеза GIF из нескольких изображений. < /p>
public static byte[] encodeGif(List frames, int frameDelayMs, boolean loopForever) {
if (frames == null || frames.isEmpty()) {
throw new IllegalArgumentException("frames 不能为空");
}
int width = frames.get(0).getWidth();
int height = frames.get(0).getHeight();
// ByteArrayOutputStream + FFmpegFrameRecorder
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
try (FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(baos, width, height)) {
recorder.setFormat("gif");
recorder.setFrameRate(1000.0 / frameDelayMs);
recorder.setOption("loop", loopForever ? "0" : "1");
recorder.start();
Java2DFrameConverter converter = new Java2DFrameConverter();
for (BufferedImage img : frames) {
// 把 BufferedImage 转成 Frame
Frame frame = converter.convert(img);
recorder.record(frame);
}
recorder.stop();
}
return baos.toByteArray();
} catch (Exception e) {
log.error("FastGifUtil.encodeGif 失败", e);
throw new RuntimeException("生成 GIF 失败", e);
}
}
< /code>
Наконец, я подготовил данные для проверки, ниже приведен мой тестовый код: < /p>
public void testGenerateGif() {
log.info(">>>>>>>>>>> start get bufferedImage > start generate gif
Подробнее здесь: https://stackoverflow.com/questions/796 ... lizererror