写在前面
webp 格式的图片可以支持动图和静图,但我们无法简单的通过判断后缀名格式一类的做法来处理。我们可以通过读取该 webp 图片的内容,来判断该 webp 图片是否为动图。
内容
以下面这张 webp 图片为例
我们使用编辑器直接打开它,可以看到如下的内容:
如果这是一张动态的 webp 图片,那么它的内容前面部分,会带有 “ANIM”的字样,这可以认为是一个标识,因此,我们只需要在读取该图片的内容的时候判断是否有该内容即可。
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
data, err := os.Open("./example.webp")
if err != nil {
panic(err)
}
defer func() {
_ = data.Close()
}()
scanner := bufio.NewScanner(bufio.NewReader(data))
scanner.Split(bufio.ScanWords)
var isAnimWebp = false
var current = 0
var limit = 6
for scanner.Scan() {
if strings.Contains(scanner.Text(), "ANIM") {
isAnimWebp = true
break
}
if current > limit {
break
}
// 读取到一定的行数就不读了
current++
}
fmt.Printf("isAnimWebp: %v", isAnimWebp)
}