Spaces:
Sleeping
Sleeping
File size: 1,631 Bytes
713d623 f63ea57 a8a350d b3f1777 f63ea57 bd2dc2e f63ea57 4c9a049 f63ea57 a8a350d f63ea57 68e3db1 f63ea57 |
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 |
from flask import Flask, request, jsonify
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.png"
output_path = "svg_output.svg"
# Save input image
image.save(input_path)
# Convert to SVG using VTracer
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 SVG content
with open(output_path, "r") as f:
svg_content = f.read()
# Clean up
os.remove(input_path)
os.remove(output_path)
return svg_content
@app.route('/convert-to-vector', methods=['POST'])
def convert_to_vector_endpoint():
try:
if not request.data:
return jsonify({'error': 'No image data provided'}), 400
# Open image
image = Image.open(io.BytesIO(request.data)).convert('RGB')
# Convert to SVG
svg_content = convert_to_vector(image)
return svg_content, 200, {'Content-Type': 'text/plain'}
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/')
def index():
return jsonify({'status': 'Image to Vector API is running'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860) |