first commit

This commit is contained in:
编码猿
2024-09-27 01:20:28 +08:00
commit ddc91bf4e2
137 changed files with 4017 additions and 0 deletions

125
app/lib/face/ImagePro.py Executable file
View File

@@ -0,0 +1,125 @@
import base64
import io
import os
from PIL import Image, ImageColor
class ImageProCls:
base64FilePath=None
@staticmethod
def humanbody_blending_with_image(input_image, gray_image, bg_image):
"""
:param input_image: the PIL.Image instance, the source humanbody image
:param gray_image: the PIL.Image instance, it is created from api base64 result, a gray image
:param bg_image: the PIL.Image instance, the background image you want to replace
:return: the PIL.Image instance is blending with humanbody
notes: you should close the return object after you leave
"""
input_width, input_height = input_image.size
bg_width, bg_height = bg_image.size
input_aspect_ratio = input_width / float(input_height)
bg_aspect_ratio = bg_width / float(bg_height)
if bg_aspect_ratio > input_aspect_ratio:
target_width, target_height = int(bg_height * input_aspect_ratio), bg_height
else:
target_width, target_height = bg_width, int(bg_width / input_aspect_ratio)
crop_image = bg_image.crop((0, 0, 0+target_width, 0+target_height))
new_image = crop_image.resize((input_width, input_height))
crop_image.close()
for x in range(0, input_width):
for y in range(0, input_height):
coord = (x, y)
gray_pixel_value = gray_image.getpixel(coord)
input_rgb_color = input_image.getpixel(coord)
bg_rgb_color = new_image.getpixel(coord)
confidence = gray_pixel_value / 255.0
alpha = confidence
R = input_rgb_color[0] * alpha + bg_rgb_color[0] * (1 - alpha)
G = input_rgb_color[1] * alpha + bg_rgb_color[1] * (1 - alpha)
B = input_rgb_color[2] * alpha + bg_rgb_color[2] * (1 - alpha)
R = max(0, min(int(R), 255))
G = max(0, min(int(G), 255))
B = max(0, min(int(B), 255))
new_image.putpixel(coord, (R, G, B))
return new_image
@staticmethod
def humanbody_blending_with_color(input_image, gray_image, bg_color):
"""
:param input_image: the PIL.Image instance
:param gray_image: the PIL.Image instance, it is created from api base64 result, it is a gray image
:param bg_color: a color string value, such as '#FFFFFF'
:return: PIL.Image instance
notes: you should close the return object after you leave
"""
input_width, input_height = input_image.size
bg_rgb_color = ImageColor.getrgb(bg_color)
new_image = Image.new("RGB", input_image.size, bg_color)
for x in range(0, input_width):
for y in range(0, input_height):
coord = (x, y)
gray_pixel_value = gray_image.getpixel(coord)
input_rgb_color = input_image.getpixel(coord)
confidence = gray_pixel_value / 255.0
alpha = confidence
R = input_rgb_color[0] * alpha + bg_rgb_color[0] * (1 - alpha)
G = input_rgb_color[1] * alpha + bg_rgb_color[1] * (1 - alpha)
B = input_rgb_color[2] * alpha + bg_rgb_color[2] * (1 - alpha)
R = max(0, min(int(R), 255))
G = max(0, min(int(G), 255))
B = max(0, min(int(B), 255))
new_image.putpixel(coord, (R, G, B))
return new_image
@staticmethod
def getSegmentImg(filePath):
input_file = ''
with open(filePath, 'r') as f:
input_file = f.read()
input_file = base64.b64decode(input_file)
gray_image = Image.open(io.BytesIO(input_file))
input_image = Image.open('./imgResource/segment.jpg', 'r')
new_image = ImageProCls.humanbody_blending_with_color(input_image, gray_image, '#FFFFFF')
new_image.save('./imgResource/resultImg.jpg')
print('-' * 60)
print('结果已经生成生成文件名resultImg.jpg请在imgResource/目录下查看')
if os.path.exists(filePath):
os.remove(filePath)
f.close()
new_image.close()
input_image.close()
gray_image.close()
@staticmethod
def getMergeImg(base64Str):
imgdata = base64.b64decode(base64Str)
file = open('./imgResource/MergeResultImg.jpg', 'wb')
file.write(imgdata)
file.close()
print('结果已经生成生成文件名MergeResultImg.jpg请在imgResource/目录下查看')