Spaces:
Sleeping
Sleeping
File size: 2,214 Bytes
4a51a09 713d623 f63ea57 4a51a09 bd3a491 f63ea57 a8a350d b3f1777 bd3a491 f63ea57 8e448c7 4a51a09 f63ea57 7099760 f63ea57 8e448c7 7099760 8e448c7 7099760 f63ea57 7099760 f63ea57 7099760 f63ea57 bd3a491 4c9a049 8e448c7 f63ea57 8e448c7 f63ea57 8e448c7 a8a350d c956e8d 8e448c7 c956e8d bd3a491 c956e8d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
from flask import Flask, request, jsonify, send_file
from flask_cors import CORS
from PIL import Image
import vtracer
import io
import os
app = Flask(__name__)
CORS(app, resources={r"/convert-to-vector": {"origins": "*"}})
def convert_to_vector(image):
input_path = "temp_input.jpg"
output_path = "temp_output.svg"
try:
# Save the input image to a temporary file
image.save(input_path)
# Convert the image to SVG using VTracer with default parameters from Gradio app
vtracer.convert_image_to_svg_py(
input_path,
output_path,
colormode="color",
hierarchical="stacked",
mode="spline",
filter_speckle=4,
color_precision=6,
layer_difference=16,
corner_threshold=60,
length_threshold=4.0,
max_iterations=10,
splice_threshold=45,
path_precision=3
)
# Read the SVG output
with open(output_path, "r") as f:
svg_content = f.read()
return svg_content
finally:
# Clean up temporary files
if os.path.exists(input_path):
os.remove(input_path)
if os.path.exists(output_path):
os.remove(output_path)
@app.route('/convert-to-vector', methods=['POST'])
def convert_to_vector_endpoint():
try:
# Handle raw image data in the request body
if request.data:
image = Image.open(io.BytesIO(request.data)).convert('RGB')
else:
return jsonify({'error': 'No image data provided'}), 400
# Process the image
svg_content = convert_to_vector(image)
# Save the result to a bytes buffer
svg_io = io.BytesIO(svg_content.encode('utf-8'))
svg_io.seek(0)
# Return the SVG as a response
return send_file(svg_io, mimetype='image/svg+xml', as_attachment=True, download_name='vector_output.svg')
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/')
def index():
return jsonify({'status': 'Image to Vector Converter API is running'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860) |