Spaces:
Sleeping
Sleeping
""" | |
@author: idoia lerchundi | |
""" | |
import urllib.request | |
from PIL import Image,ImageFile | |
import streamlit as st | |
import numpy as np | |
import requests | |
from io import BytesIO | |
def local_css(file_name): | |
with open(file_name) as f: | |
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True) | |
st.set_page_config( | |
page_title="Streamlit iCodeIdoia", | |
page_icon="images/ilpicon1.png",layout="wide",initial_sidebar_state="expanded" | |
) | |
st.image("images/banner.jpg") | |
# ---- LOAD | |
local_css("styles/style.css") | |
def fill_square_cropper(img): | |
imgsz = [img.height, img.width] | |
original_size = imgsz | |
smallestsize = min(imgsz) | |
biggestsize = max(imgsz) | |
#get vertical color filler | |
avg_color_per_row = np.average(img, axis=0) | |
avg_color = np.average(avg_color_per_row, axis=0) | |
if img.height > img.width: | |
#height is bigger than width | |
area = (0, 0, img.width + (img.height - img.width),img.height) | |
cropped_img = img.crop(area) | |
newimgsz = [cropped_img.height, cropped_img.width] | |
newimg = Image.new('RGB', ([newimgsz[1],newimgsz[0]]), (round(avg_color[0]), round(avg_color[1]), round(avg_color[2]))) | |
newpos = (img.height-img.width) | |
newpos = newpos/2 | |
newimg.paste(img,(int(newpos),0)) | |
return newimg | |
#vertically add color | |
if img.width > img.height: | |
area = (0, 0, img.width, img.height+ (img.width - img.height)) | |
cropped_img = img.crop(area) | |
newimgsz = [cropped_img.height, cropped_img.width] | |
newimg = Image.new('RGB', ([newimgsz[1],newimgsz[0]]), (round(avg_color[0]), round(avg_color[1]), round(avg_color[2]))) | |
newpos = (img.width-img.height) | |
newpos = newpos/2 | |
newimg.paste(img,(0,(int(newpos)))) | |
return newimg | |
# ---- TABS | |
tab1, tab2 = st.tabs(["Demo","Application"]) | |
with tab1: | |
# Handle first image | |
url = "https://raw.githubusercontent.com/webdevserv/images_video/main/cowportrait.jpg" | |
# Handle second image | |
url2 = "https://raw.githubusercontent.com/webdevserv/images_video/main/cowlandscape.jpg" | |
st.subheader("Square an image demo") | |
img_description = st.text('Image will be squared with color filler where applicable.') | |
if st.button('Square and Fill Demo'): | |
response = requests.get(url) | |
img = Image.open(BytesIO(response.content)) | |
img.load() | |
generated_img = fill_square_cropper(img) | |
st.image(generated_img) | |
response = requests.get(url2) | |
img = Image.open(BytesIO(response.content)) | |
img.load() | |
generated_img = fill_square_cropper(img) | |
st.image(generated_img) | |
with tab2: | |
st.subheader("Square an image app") | |
img_description = st.text('Image will be squared with color filler where applicable.') | |
uploaded_file = st.file_uploader("Upload a JPG image to square and fill with color.", type=['jpg']) | |
if uploaded_file is not None: | |
img = Image.open(uploaded_file) | |
img.load() | |
generated_img = fill_square_cropper(img) | |
st.image(generated_img) | |
st.balloons() |