86 lines
1.8 KiB
Python
86 lines
1.8 KiB
Python
|
from . import Image
|
||
|
|
||
|
modules = {
|
||
|
"pil": "PIL._imaging",
|
||
|
"tkinter": "PIL._tkinter_finder",
|
||
|
"freetype2": "PIL._imagingft",
|
||
|
"littlecms2": "PIL._imagingcms",
|
||
|
"webp": "PIL._webp",
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_module(feature):
|
||
|
if not (feature in modules):
|
||
|
raise ValueError("Unknown module %s" % feature)
|
||
|
|
||
|
module = modules[feature]
|
||
|
|
||
|
try:
|
||
|
__import__(module)
|
||
|
return True
|
||
|
except ImportError:
|
||
|
return False
|
||
|
|
||
|
|
||
|
def get_supported_modules():
|
||
|
return [f for f in modules if check_module(f)]
|
||
|
|
||
|
|
||
|
codecs = {
|
||
|
"jpg": "jpeg",
|
||
|
"jpg_2000": "jpeg2k",
|
||
|
"zlib": "zip",
|
||
|
"libtiff": "libtiff"
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_codec(feature):
|
||
|
if feature not in codecs:
|
||
|
raise ValueError("Unknown codec %s" % feature)
|
||
|
|
||
|
codec = codecs[feature]
|
||
|
|
||
|
return codec + "_encoder" in dir(Image.core)
|
||
|
|
||
|
|
||
|
def get_supported_codecs():
|
||
|
return [f for f in codecs if check_codec(f)]
|
||
|
|
||
|
|
||
|
features = {
|
||
|
"webp_anim": ("PIL._webp", 'HAVE_WEBPANIM'),
|
||
|
"webp_mux": ("PIL._webp", 'HAVE_WEBPMUX'),
|
||
|
"transp_webp": ("PIL._webp", "HAVE_TRANSPARENCY"),
|
||
|
"raqm": ("PIL._imagingft", "HAVE_RAQM")
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_feature(feature):
|
||
|
if feature not in features:
|
||
|
raise ValueError("Unknown feature %s" % feature)
|
||
|
|
||
|
module, flag = features[feature]
|
||
|
|
||
|
try:
|
||
|
imported_module = __import__(module, fromlist=['PIL'])
|
||
|
return getattr(imported_module, flag)
|
||
|
except ImportError:
|
||
|
return None
|
||
|
|
||
|
|
||
|
def get_supported_features():
|
||
|
return [f for f in features if check_feature(f)]
|
||
|
|
||
|
|
||
|
def check(feature):
|
||
|
return (feature in modules and check_module(feature) or
|
||
|
feature in codecs and check_codec(feature) or
|
||
|
feature in features and check_feature(feature))
|
||
|
|
||
|
|
||
|
def get_supported():
|
||
|
ret = get_supported_modules()
|
||
|
ret.extend(get_supported_features())
|
||
|
ret.extend(get_supported_codecs())
|
||
|
return ret
|