图片的base64编码

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()
"""
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值