You've already forked DataMate
init datamate
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# -- encoding: utf-8 --
|
||||
import pickle
|
||||
|
||||
import base64
|
||||
from io import BytesIO
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
|
||||
|
||||
def bytes_to_numpy(image_bytes):
|
||||
"""bytes转数组"""
|
||||
image_np = np.frombuffer(image_bytes, dtype=np.uint8)
|
||||
image_np2 = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
|
||||
return image_np2
|
||||
|
||||
|
||||
def numpy_to_bytes(image_np, file_type):
|
||||
"""
|
||||
数组转bytes
|
||||
|
||||
Params:
|
||||
|
||||
file_type: as required by OpenCV, extension must have a leading period.
|
||||
"""
|
||||
if not image_np.size:
|
||||
return b""
|
||||
data = cv2.imencode(file_type, image_np)[1]
|
||||
image_bytes = data.tobytes()
|
||||
return image_bytes
|
||||
|
||||
|
||||
def pil_to_bytes(src: Image.Image) -> bytes:
|
||||
"""将 PIL.Image 转换为字节流"""
|
||||
# 确保图像是 RGB 模式
|
||||
src = src.convert("RGB")
|
||||
with BytesIO() as bytes_io:
|
||||
src.save(bytes_io, format='PNG')
|
||||
im_bytes = bytes_io.getvalue()
|
||||
return im_bytes
|
||||
|
||||
|
||||
def bytes_to_pil(src: bytes) -> Image.Image:
|
||||
"""将字节流转换为 PIL.Image"""
|
||||
with BytesIO() as bytes_io:
|
||||
with Image.open(bytes_io) as pil_img: # 使用with/as语句确保资源被正确释放
|
||||
pil_img.load() # 确保图像数据被加载
|
||||
return pil_img.copy() # 返回图像的副本以避免资源被关闭后无法使用
|
||||
|
||||
|
||||
def pil_to_base64(src: Image.Image):
|
||||
"""PIl.Image转base64"""
|
||||
with BytesIO() as img_buffer:
|
||||
src.save(img_buffer, format='png')
|
||||
byte_data = img_buffer.getvalue()
|
||||
base64_str = base64.b64encode(byte_data)
|
||||
return base64_str
|
||||
|
||||
|
||||
def obj_to_bytes(src: object) -> bytes:
|
||||
return pickle.dumps(src)
|
||||
|
||||
|
||||
def bytes_to_obj(src: bytes) -> object:
|
||||
return pickle.loads(src)
|
||||
Reference in New Issue
Block a user