Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from PIL import Image | |
| import numpy as np | |
| import cv2 | |
| import svgwrite | |
| import io | |
| st.title("Image to Embroidery Converter") | |
| st.write("Upload an image and get a stitch-style SVG preview.") | |
| uploaded_file = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"]) | |
| def process_image(uploaded_image): | |
| img = Image.open(uploaded_image).convert("L") | |
| img = img.resize((300, 300)) | |
| img_np = np.array(img) | |
| edges = cv2.Canny(img_np, threshold1=100, threshold2=200) | |
| svg = svgwrite.Drawing(size=(img.width, img.height)) | |
| for y in range(1, edges.shape[0] - 1): | |
| for x in range(1, edges.shape[1] - 1): | |
| if edges[y, x] == 255: | |
| svg.add(svg.circle(center=(x, y), r=0.4, fill='black')) | |
| svg_buffer = io.StringIO() | |
| svg.write(svg_buffer) | |
| return svg_buffer.getvalue() | |
| if uploaded_file: | |
| st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) | |
| svg_data = process_image(uploaded_file) | |
| st.download_button("Download SVG", data=svg_data, file_name="embroidery_preview.svg", mime="image/svg+xml") | |
| st.markdown("### Embroidery Stitch Preview (SVG)") | |
| st.code(svg_data, language="xml") |