Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查图像文件是否是python中的有效SVG文件_Python_Image_Svg - Fatal编程技术网

检查图像文件是否是python中的有效SVG文件

检查图像文件是否是python中的有效SVG文件,python,image,svg,Python,Image,Svg,我正在寻找一种方法来确定图像_文件是否是有效的SVG文件 使用imghdr可以很好地用于其他文件类型、PNG等,但对于SVG,它只返回None 除了检查文件扩展名,我是否可以使用其他包或其他方法来确保图像文件是SVG?import re import re from urllib.request import urlopen SVG_R = r'(?:<\?xml\b[^>]*>[^<]*)?(?:<!--.*?-->[^<]*)*(?:<svg

我正在寻找一种方法来确定图像_文件是否是有效的SVG文件

使用
imghdr
可以很好地用于其他文件类型、PNG等,但对于SVG,它只返回
None

除了检查文件扩展名,我是否可以使用其他包或其他方法来确保图像文件是SVG?

import re
import re
from urllib.request import urlopen

SVG_R = r'(?:<\?xml\b[^>]*>[^<]*)?(?:<!--.*?-->[^<]*)*(?:<svg|<!DOCTYPE svg)\b'
SVG_RE = re.compile(SVG_R, re.DOTALL)

# an example SVG file:
f = urlopen("https://upload.wikimedia.org/wikipedia/commons/1/17/Yin_yang.svg")

file_contents = f.read().decode('latin_1')  # avoid any conversion exception

is_svg = SVG_RE.match(file_contents) is not None

print(['NOT SVG', 'SVG'][is_svg])  # prints SVG
从urllib.request导入urlopen
SVG_R=R'(?:]*>[^有趣的是,regex只是检查并查看文件的内容是否为有效的svg格式?好吧,它检查文件的开头是否为有效的svg格式。但这也是
imghdr
所做的……在一篇针对浏览器环境中解决同一问题的评论中,有人向我指出,测试XMLprolog可能是一个限制性太强的要求。@ccprog我不太理解你的评论,但谢谢你的链接,它告诉我我可以删除不区分大小写。我的意思是,特别是浏览器将呈现独立的SVG文件,即使XML prolog丢失并且文件以根
元素开头。其他呈现RER可能会抱怨,也可能不会。有效性可能是一个取决于您的用例的概念。将其加载到xml解析器中,使用解析器检查根元素是否为svg,是否在svg名称空间中如果我的答案对您有所帮助,您介意“接受”吗它?我可以用这些积分来实现个人目标。如果你需要进一步调整,以使其对你有用,当然,我仍然可以继续努力。