image - 在python中,如何查找base編碼圖像的文件擴展名

124 4

在Django里,我有一個base編碼的圖像,我解碼並保存到ImageField,我想給文件一個隨機的名稱,但是我不知道文件擴展名。

时间: 原作者:

66 3

最佳實踐可能是使用文件魔術,可以使用(如這個)或這個python包。

為了處理模糊類型,python提供了一個標準包:


>>> from mimetypes import guess_extension


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


'.cpt'


>>> guess_extension('image/png')


'.png'



原作者:
54 5

即使在python 2中,mimetypes標準庫模塊也支持數據url:


>>> from mimetypes import guess_extension, guess_type


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


'.png'



原作者:
77 0

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

基本上mimetypes.guess_extension(mine)應該做這個工作。

原作者:
143 4


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')



原作者:
77 5

假定將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)



原作者:
...