如何解决如何使用 PIL 在 python 中检查 .webp 文件是 gif 还是图像?
我试图在 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...
解决方法
最终,我找到了如何读取图像/.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。