欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python图片的base64编码

程序员文章站 2022-07-08 17:18:25
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