How to add a box inside the image using python

Question:

I have a code which convert the image into color sketch in that i have added a text(water mark) due to the dark background the text is not properly visible so i need a box with white background so that text would be clearly visible

To display text in bottom right i have did some calculation using width and height

Thanks in Advance

import streamlit as st

import numpy as np

from PIL import Image,ImageDraw,ImageFont

import cv2




def color_quantization(img, k):

# Transform the image

  data = np.float32(img).reshape((-1, 3))



# Determine criteria

  criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)



# Implementing K-Means

  ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)

  center = np.uint8(center)

  result = center[label.flatten()]

  result = result.reshape(img.shape)

  return result



file_image = st.sidebar.file_uploader("Upload your Photos", type=['jpeg','jpg','png'])

    

if file_image is None:

    st.write("You haven't uploaded any image file")

    

else:

    image = Image.open(file_image)

    st.image(image)

    width, height = image.size 

    final1 =ImageDraw.Draw(image)

    text = "my sketch"

    textwidth, textheight = final1.textsize(text)

    margin = 10

    x = width - textwidth - margin

    y = height - textheight - margin

    final1.text((x,y), text,fill ="Black")

    final_sketch = color_quantization(np.array(image),9)

    st.image(final_sketch, use_column_width=True)
Asked By: Jerry Vfc

||

Answers:

Just use ImageDraw.rectangle() to draw a white rectangle before adding the text:

final1.rectangle((x,y,width,height), fill="white")

I think some folk call it an "underbox".

Answered By: Mark Setchell