【问题标题】:How to check if a .webp file is a gif or image in python using PIL?如何使用 PIL 检查 .webp 文件是否是 python 中的 gif 或图像?
【发布时间】:2021-08-04 22:13:51
【问题描述】:

我试图在 python 中创建一个“.webp 提取器脚本”,在其中我会循环通过一个预先确定的文件目录搜索 .webp,然后确定它们是保存为 .webp 的 .gif 文件类型还是不是这样,我可以将 .webp 保存为 .gif 或者如果它不是 .gif 为 .webp,那么它将是保存为 .webp 的 .jpg/.png 等图像,所以我可以保存.webp 作为图像。

但是,检测 .webp 是否存储 gif 或图像有点令人困惑,这是我在检查之前的代码:

import os
from PIL import Image

for entry in os.scandir(Directory):
    Searched += 1
    if entry.path.endswith(".webp") and entry.is_file():
        print("--------------")
        print("Found a : .webp")
        print(entry.path)

        IsAGif = False

        MediaFile = Image.open(entry.path)

然后我被困在那里,不得不尝试找到一些解决方案。但我必须改变我的心态,并从逻辑上思考。我认为 .gif 有多个图像帧,而 .png 之类的图像只有一个。因此,如果我可以阅读 .webp 文件并找出它,我就可以区分图像和 .gif...

【问题讨论】:

    标签: python-3.x image png webp


    【解决方案1】:

    最终,我找到了如何读取图像/.gif 中的帧:

    import os
    from PIL import Image, ImageSequence
    
    MediaFile = Image.open(entry.path)
    for frame in ImageSequence.Iterator(MediaFile):
         #Rest of code here
    

    因此,要查找 .webp 是 .gif 还是图像,我只需要读取有多少帧。如果有一帧,.webp 是一个图像,否则如果它超过一帧,它是一个 .gif,因为它在帧之间转换。因此,我为此提出了一个功能:

    from PIL import Image, ImageSequence
    
    def IsAGif(FilePath):
        try:
            MediaFile = Image.open(FilePath)
            Index = 0
            for Frame in ImageSequence.Iterator(MediaFile):
                Index += 1
            if Index > 1: #Must mean the the .webp is a gif because it has more than one frame
                return True
            else: #Must mean that the .webp has 1 frame which makes it a image
                return False
        except: #If the .webp can't be opened then it is most likely not a .gif or .webp
            return False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-15
      • 2012-04-20
      • 1970-01-01
      • 2018-02-12
      • 2019-01-31
      • 2020-12-04
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多