当前位置: 移动技术网 > IT编程>脚本编程>Python > python图片的base64编码

python图片的base64编码

2020年08月01日  | 移动技术网IT编程  | 我要评论
1. 基于base64的编解码import base64# 编码with open(img_path1, 'rb') as f:image_data = f.read() base64_data = base64.b64encode(image_data) base64_str_1 = str(base64_data, 'utf-8') print(base64_str_1)# 解码with open(img_path2, 'wb') as f: img_dat
1. 图片文件的base64编解码
import base64 # 编码 with open(img_path1, 'rb') as f: image_data = f.read() base64_data = base64.b64encode(image_data) base64_str_1 = str(base64_data, 'utf-8') print(base64_str_1) # 解码 with open(img_path2, 'wb') as f: img_data = base64.b64decode(base64_data) f.write(img_data) 
2. 图片文件的base64image编解码

base64image是对base64的封装。安装方式:pip install base64image

from base64image import Base64Image # 编码 b64_image = Base64Image.from_file(img_path1) # 可直接存储:b64_image.to_file(img_path2) base64_str_2 = str(b64_image.base64_image_string, 'utf-8') # equal to base64_str_1 # 解码 base64_image = Base64Image.from_base64_image_string(b64_image.base64_image_string) # or: base64_image = Base64Image.from_base64_image_string(base64_str_2) pil_image = base64_image.get_pil_image() pil_image.save(img_path2) 
3. 图片numpy.array的base64编解码
from PIL import Image from io import BytesIO import base64 import cv2 def np_to_base64_way1(img_np): img = cv2.imencode('.jpg',img_np)[1] base64_data = base64.b64encode(img) base64_str = str(base64_data, 'utf-8') return base64_str def np_to_base64_way2(img_np): image = Image.fromarray(cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)) output_buffer = BytesIO() image.save(output_buffer, format="JPEG") byte_data = output_buffer.getvalue() base64_data = base64.b64encode(byte_data) base64_str = str(base64_data, 'utf-8') return base64_str def base64_to_np(base64_data): # input_parameter is base64_data, not base64_str img_data = base64.b64decode(base64_data) img_array = np.fromstring(img_data, np.uint8) img = cv2.imdecode(img_array, cv2.IMREAD_COLOR) return img """ notes:
1. 图片经cv2.imencode()后, 可直接cv2.imdecode();
2. 图片经cv2.imencode()后, 再接base64.b64encode(), 
   解码时须先base64.b64decode, np.fromstring(), 最后cv2.imdecode();
3. np_to_base64_way1() 和 np_to_base64_way2()的返回记为base64_str_3、 base64_str4, 
  和前文直接从图片文件编码得到的base64_str_1相比, 这三者均不相等。
  例如, 对一张(1160,720,3)大小的图片,三种编码字符串相互之间的编辑距离分别为:
  1vs2=74280, 1vs3=80004, 2vs3=81247。
  此外,基于这三种方法得到的base64_data, 用base64_to_np()进行解码,可得到
  numpy.array格式的图片,这些array和cv.imread()直接读进来的array并不相同,
  但是, 各array分别存储后,人眼几乎看不出差异。
4.编辑距离的计算可安装Levenshtein包:pip install python-Levenshtein
  from Levenshtein import StringMatcher as sm
  dis = sm.StringMatcher(seq1=base64_str_1, seq2=base64_str_2).distance()
""" 

本文地址:https://blog.csdn.net/Bear_Kai/article/details/108241396

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网