在Python中检测文件是否为图像

这个问题在这里已经有了答案:

  • 如何检查文件是否是有效的图像文件? 7个答案

  • 假设:

    >>> files = {"a_movie.mkv", "an_image.png", "a_movie_without_extension", "an_image_without_extension"}
    

    它们是脚本文件夹中正确的电影和图像文件。

    你可以使用内建mimetypes模块,但是如果没有扩展名,它将不起作用。

    >>> import mimetypes
    >>> {file: mimetypes.guess_type(file) for file in files}
    {'a_movie_without_extension': (None, None), 'an_image.png': ('image/png', None), 'an_image_without_extension': (None, None), 'a_movie.mkv': (None, None)}
    

    或者调用unix命令file 。 这可以在没有扩展的情况下运行,但不适用

    >>> import subprocess
    >>> def find_mime_with_file(path):
    ...     command = "/usr/bin/file -i {0}".format(path)
    ...     return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE).communicate()[0].split()[1]
    ... 
    >>> {file: find_mime_with_file(file) for file in files}
    {'a_movie_without_extension': 'application/octet-stream;', 'an_image.png': 'image/png;', 'an_image_without_extension': 'image/png;', 'a_movie.mkv': 'application/octet-stream;'}
    

    或者你尝试用PIL打开它,并检查错误,但需要安装PIL:

    >>> from PIL import Image
    >>> def check_image_with_pil(path):
    ...     try:
    ...         Image.open(path)
    ...     except IOError:
    ...         return False
    ...     return True
    ... 
    >>> {file: check_image_with_pil(file) for file in files}
    {'a_movie_without_extension': False, 'an_image.png': True, 'an_image_without_extension': True, 'a_movie.mkv': False}
    

    或者,为了简单起见,如您所说,只需检查附加信息,这是我认为的最佳方式。

    >>> extensions = {".jpg", ".png", ".gif"} #etc
    >>> {file: any(file.endswith(ext) for ext in extensions) for file in files}
    {'a_movie_without_extension': False, 'an_image.png': True, 'an_image_without_extension': False, 'a_movie.mkv': False}
    

    你应该为此使用一个库。 请注意,扩展名!=文件类型,因为您可以将扩展名更改为.jpg文件,使用油漆打开它,油漆会将其解释为像jpeg(例如)。 你应该检查如何在Python中找到一个文件的MIME类型?

    链接地址: http://www.djcxy.com/p/46803.html

    上一篇: Detecting if a file is an image in Python

    下一篇: Get the mimetype of a file with Python