如何识别webp图像是静态还是动画?

时间:2017-07-19 12:22:15

标签: javascript php webp

我正在开展一个项目,用户可以上传webp图片。我知道如何将webp图像转换为jpg / png。但我坚持认为,如何识别webp图像是静态的(非动画的)还是动画的。 我想确定因为转换我正在使用这样的命令:

非动画网页指向jpg -

dwebp nonanimated.webp -o jpg.jpg

将动画webp命令为非动画webp(需要第2帧) -

webpmux -get frame 2 animated.webp -o nonanimated.webp

但我没有找到一个可以处理这两种情况的命令。所以我想识别webp图像。

我在服务器端使用PHP,在HTMLJavascript使用前端。

2 个答案:

答案 0 :(得分:2)

经过大量调查后,我发现动画webp图像总是包含一些字符串,当在文本编辑器中打开时,非动画图像不会。字符串为ANMFANIM。我在所有的webp图像中检查了这些字符串。所以这对我来说是完美的。以下是PHPJavascriptShell Script中的一些解决方案:

在PHP中:

<?php
function isWebpAnimated($src){
    $webpContents = file_get_contents($src);
    $where = strpos($webpContents, "ANMF");
    if ($where !== FALSE){
        // animated
        $isAnimated = true;
    }
    else{
        // non animated
        $isAnimated = false;
    }
    return $isAnimated;
}
?>

在Javascript中:

function isAnimatedGif(src) {
    var request = new XMLHttpRequest();
    request.open('GET', src, true);
    request.addEventListener('load', function () {
        if(request.response.indexOf("ANMF") != -1){
            // animated
            alert(true);
        }
        else{
            // non animated
            alert(false);
        }
    });
    request.send();
}

但如果大图片PHPJavascript效果不佳,那么最佳解决方案是使用Shell Script,如果您有Ubuntu

在Shell脚本中:

echo $(grep -c "ANMF" ~/animated.webp)
如果没有动画,则返回0,否则为动画的非零值。

答案 1 :(得分:1)

根据Sven LiivakisWebpAnimated() ...存在一个小错误。

fseek($fh, 16);

应为:

fseek($fh, 20);

因为位置16chunk_size中的VP8X位置。 但是我们需要flag的{​​{1}}位置。

固定功能:

20