方案设计
- 获取帧数小于 GIF能截取的总帧数 ?
- 进行实验,产出性能报告:
- 打开jvm监控,程序进行GIF截桢
- 控制变量
- 截桢线程数 (多少线程并发运行)?
- 截桢图片来源(运营提供)?
- 截桢程序 CPU 占用 (统计时间:运行前 ~运行中,CPU变化)?
- 截桢程序 内存 占用 (统计时间:运行前 ~运行中,内存变化)?
- 截桢程序 截取GIF图片耗时?
- 控制变量
- 打开jvm监控,程序进行GIF截桢
Java版本-1.8.0_02
Java(TM)SE运行时环境(内部版本1.8.0_02-b13)
Java HotSpot(TM)64位服务器VM(内部版本23.0-b10,混合模式)
JVM分配 2C / 2G
2线程并发情况
内存变化
| CPU使用情况 | GIF截桢耗时 (>=5桢耗时均值) | 是否丢桢 | GIF | |
java原生 | 50M | 40% | 20~30ms | 是 | 原生JAVA截GIF 会出现部分桢无法获取,造成丢桢 |
Im4Java | 需要安装ImageMagick,太重 | ||||
open-imaging | 500MB | 50% | 70~90ms | 否 | 内存消耗大是因为内部进行了多次IO,进行桢位置重置,保证所有桢都能正常读取 |
Ffmpeg |
(本身程序CPU&内存不大,ffmpeg方案视频同学也是在使用的,内存与CPU使用都偏高,没法在低配机器上执行)
java原生
2线程
Open-imaging:
2线程
原生JAVA截GIF 问题: java.lang.ArrayIndexOutOfBoundsException: 4096 | java - ArrayIndexOutOfBoundsException: 4096 while reading gif file - Stack Overflow 编写了一个GIF图像解码器,并根据GitHub上的Apache License 2.0发布了它。您可以在这里下载:https : //github.com/DhyanB/Open-Imaging。用法示例: void example(final byte[] data) throws Exception { |
Im4Java 需要安装ImageMagick | Java图片处理 - 安装ImageMagick库使用convert命令_大大的微笑的博客-CSDN博客_imagemagick convert 安装 |