如何检测给定的图像文件是否是Android中的动画GIF

时间:2016-03-17 12:46:31

标签: java android image animation gif

正在写一个图像编辑器。

我不支持编辑GIF动画,因此当用户选择图像时,如果该图像是GIF动画,我需要显示错误信息。

所以给定一个文件路径,我如何区分静态和动画gif?

我检查了问题Understand an gif is animated or not in JAVA,但它不适用于Android,因为ImageIO类不可用。

注意:我只需要知道是否有动画,所以我想要最快的方法

1 个答案:

答案 0 :(得分:2)

以下代码适用于我:

使用图片http url。

进行检查
URL url = new URL(path);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];
int len = 0;

while ((len = inputStream.read(buffer)) != -1) {
    outStream.write(buffer, 0, len);
}

inputStream.close();
byte[] bytes = outStream.toByteArray();

Movie gif = Movie.decodeByteArray(bytes, 0, bytes.length);
//If the result is true, its a animated GIF
if (gif != null) {
    return true;
} else {
    return false;
}

或者通过库中的选择文件进行检查:

try {
    //filePath is a String converted from a selected image's URI
    File file = new File(filePath);
    FileInputStream fileInputStream = new FileInputStream(file);
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();

    byte[] buffer = new byte[1024];
    int len = 0;

    while ((len = fileInputStream.read(buffer)) != -1) {
        outStream.write(buffer, 0, len);
    }

    fileInputStream.close();
    byte[] bytes = outStream.toByteArray();

    Movie gif = Movie.decodeByteArray(bytes, 0, bytes.length);
    //If the result is true, its a animated GIF
    if (gif != null) {
        type = "Animated";
        Log.d("Test", "Animated: " + type);
    } else {
        type = "notAnimated";
        Log.d("Test", "Animated: " + type);
   }
} catch (IOException ie) {
   ie.printStackTrace();
}