|
import io |
|
|
|
import numpy as np |
|
from PIL import Image |
|
|
|
|
|
def to_bytes(image: Image.Image) -> bytes: |
|
with io.BytesIO() as output: |
|
image.save(output, format="JPEG") |
|
return output.getvalue() |
|
|
|
|
|
def resize_image(image: Image.Image, dimension: int = 512) -> Image.Image: |
|
iw, ih = image.size |
|
if iw > ih: |
|
image = image.resize((dimension, int(dimension * ih / iw))) |
|
else: |
|
image = image.resize((int(dimension * iw / ih), dimension)) |
|
return image |
|
|
|
|
|
def HWC3(x): |
|
"x: numpy array" |
|
assert x.dtype == np.uint8 |
|
if x.ndim == 2: |
|
x = x[:, :, None] |
|
assert x.ndim == 3 |
|
H, W, C = x.shape |
|
assert C == 1 or C == 3 or C == 4 |
|
if C == 3: |
|
return x |
|
if C == 1: |
|
return np.concatenate([x, x, x], axis=2) |
|
if C == 4: |
|
color = x[:, :, 0:3].astype(np.float32) |
|
alpha = x[:, :, 3:4].astype(np.float32) / 255.0 |
|
y = color * alpha + 255.0 * (1.0 - alpha) |
|
y = y.clip(0, 255).astype(np.uint8) |
|
return y |
|
|
|
|
|
def from_bytes(data: bytes) -> Image.Image: |
|
return Image.open(io.BytesIO(data)) |
|
|
|
|
|
def padd_image(image: Image.Image, to_width: int, to_height: int) -> Image.Image: |
|
iw, ih = image.size |
|
img = Image.new("RGBA", (to_width, to_height), (0, 0, 0, 0)) |
|
img.paste(image, ((to_width - iw) // 2, (to_height - ih) // 2)) |
|
return img |
|
|