chat-at / overlay.py
Omnibus's picture
Upload 6 files
bc1c656
raw
history blame
2.8 kB
import cv2
from PIL import ImageFont, ImageDraw, Image
def process(img,font_text,font_fac,font_x,font_y,font_col,font_op):
img.save('tmp.png')
img = Image.open('tmp.png').convert("RGBA")
im=img
#im=Image.open(img)
txt = Image.new('RGBA', im.size, (255,255,255,0))
w, h = im.size
print (f'FONT COLOR: {font_col}')
#t_fill = ("#"+"E6"+f"{font_col.strip('#')}")
#t_fill = (font_col)
h1 = font_col.strip("#")
rgb_tup = tuple(int(h1[i:i+2], 16) for i in (0, 2, 4))
print (rgb_tup)
a,b,c = rgb_tup
t_fill = (a,b,c,font_op)
print (f'FONT COLOR: {t_fill}')
#x = int(w-font_x)
#y = int(h-font_y)
x = int(font_x)
y = int(font_y)
draw = ImageDraw.Draw(txt)
text = f'{font_text}'
font_size=font_fac
font = ImageFont.truetype("./fonts/SansitaOne.ttf", int(font_size))
size = font.getsize(text)
draw.text((x-size[0]/2, y),text, font = font, fill=t_fill)
#txt.putalpha(128)
combined = Image.alpha_composite(im, txt)
return combined
def textover(im,txt1="",txt2=""):
#im.save('tmp.png')
im = Image.open(im)
inp=1
hh=0
hhh=25
#cnt = len(inp)
cnt = inp
font_a = 30
font_b = 10
if cnt >0:
font_a = font_a + (cnt * 2)
font_b = font_b + (cnt * 2)
#hh = hh-int(cnt/2)
hhh = hhh+int(cnt/2)
w,h = im.size
print (w)
print (h)
font_x = (w/2)
font_y = h-hhh
out = process(im,txt1,font_fac=font_a,font_x=font_x,font_y=hh,font_col="#000000",font_op=255)
out = process(out,txt2,font_fac=font_b,font_x=font_x,font_y=font_y,font_col="#000000",font_op=255)
#out.save("out.png")
return out
def background_image():
img_b = np.zeros([512,512,3],dtype=np.uint8)
img_b.fill(255)
img_b.save("background.png")
def custom_overlay(txt=None):
background_image()
background = Image.open("background.png")
x,y = background.size
if x > y:
aa=y
if y > x:
aa=x
if x==y:
aa=x
out = f'{txt}'
print (f'txt {out}')
qrm = qr.QRCode(box_size=10,error_correction=qr.constants.ERROR_CORRECT_H)
qrm.add_data(out)
qrm.make(fit=True)
img1 = qrm.make_image(fill_color=fill, back_color="white")
img1 = img1.resize((aa,aa))
img1.save("im2.png")
image_bgr = cv2.imread('im2.png')
h, w, c = image_bgr.shape
image_bgra = np.concatenate([image_bgr, np.full((h, w, 1), 255, dtype=np.uint8)], axis=-1)
white = np.all(image_bgr == [255, 255, 255], axis=-1)
image_bgra[white, -1] = 0
cv2.imwrite('result.png', image_bgra)
over_im = Image.open("result.png")
background.paste(over_im, (0, 0), over_im)
background.save("out_im.png")
return "out_im.png"