image - 在python中,如何查找base编码图像的文件扩展名

在Django里,我有一个base编码的图像,我解码并保存到ImageField,我想给文件一个随机的名称,但是我不知道文件扩展名。

时间: 原作者:

最佳实践可能是使用文件魔术,可以使用(如这个)或这个python包。

为了处理模糊类型,python提供了一个标准包:


>>> from mimetypes import guess_extension


>>> guess_extension('image/x-corelphotopaint')


'.cpt'


>>> guess_extension('image/png')


'.png'



原作者:

即使在python 2中,mimetypes标准库模块也支持数据url:


>>> from mimetypes import guess_extension, guess_type


>>> guess_extension(guess_type("data:image/png;base64,")[0])


'.png'



原作者:

可以使用mimetypes模块* http://docs.python.org/2/library/mimetypes.html

基本上mimetypes.guess_extension(mine)应该做这个工作。

原作者:


import base64


import imghdr


def lambda_handler(event, context):


 image_data = event['img64'] # crate"json event" in lambda 


 # Sample JSON Event ========> {"img64" : BASE64 of an Image }


 # Get BASE64 Data of image in image_data variable.


 sample = base64.b64decode(image_data) # Decode the base64 data and assing to sample.



 for tf in imghdr.tests:


 res = tf(sample, None)


 if res:


 break;


 print("Extension OR Type of the Image =====>",res)


 if(res==None): # if res is None then BASE64 is of not an image.


 return {


 'status': 'False',


 'statusCode': 400,


 'message': 'It is not image, Only images allowed'


 }


 else:


 return 'It is image' 



注意:以上代码是在python中编写的Lambda (ws ),你可以将以下代码复制并粘贴到本地计算机,并按如下方式进行测试。


import base64


import imghdr


image_data ="BASE64 OF AN IMAGE"


sample = base64.b64decode(image_data) # Decode the base64 data and assing to sample.



for tf in imghdr.tests:


 res = tf(sample, None)


 if res:


 break;


print("Extension OR Type of the Image =====>",res)


if(res==None):


 print('It is not image, Only images allowed')


else:


 print('It is image')



原作者:

假定将base编码在变量encoded_string中,下面的代码对我有效:


from base64 import b64decode


import imghdr



encoded_string = 'image base64 encoded'



decoded_string = b64decode(var)


extension = imghdr.what(None, h=decoded_string)



原作者:
...