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"