我正在开展一个项目,用户可以上传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
,在HTML
和Javascript
使用前端。
答案 0 :(得分:2)
经过大量调查后,我发现动画webp
图像总是包含一些字符串,当在文本编辑器中打开时,非动画图像不会。字符串为ANMF
和ANIM
。我在所有的webp图像中检查了这些字符串。所以这对我来说是完美的。以下是PHP
,Javascript
和Shell 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();
}
但如果大图片PHP
和Javascript
效果不佳,那么最佳解决方案是使用Shell Script
,如果您有Ubuntu
。
在Shell脚本中:
echo $(grep -c "ANMF" ~/animated.webp)
如果没有动画,则返回0,否则为动画的非零值。
答案 1 :(得分:1)
根据Sven Liivak的isWebpAnimated()
...存在一个小错误。
fseek($fh, 16);
应为:
fseek($fh, 20);
因为位置16
是chunk_size
中的VP8X
位置。
但是我们需要flag
的{{1}}位置。
固定功能:
20