save code
This commit is contained in:
+90
-85
@@ -72,42 +72,6 @@ def GetPicDesc(img_url):
|
||||
|
||||
return result
|
||||
|
||||
# ComfyUI 的 input 目录路径(根据实际修改)
|
||||
COMFYUI_INPUT_DIR = "/home/szlc/code/ComfyUI/input"
|
||||
os.makedirs(COMFYUI_INPUT_DIR, exist_ok=True)
|
||||
|
||||
def get_file_extension(url_or_filename):
|
||||
"""从 URL 或文件名中提取扩展名(如 .jpg、.png)"""
|
||||
# 处理 URL 情况(如 https://example.com/image.jpg?width=200)
|
||||
if url_or_filename.startswith(('http://', 'https://')):
|
||||
parsed = urlparse(url_or_filename)
|
||||
path = parsed.path
|
||||
else:
|
||||
path = url_or_filename
|
||||
|
||||
# 提取扩展名(转换为小写,去掉问号后的参数)
|
||||
ext = os.path.splitext(path)[1].lower().split('?')[0]
|
||||
return ext if ext else '.png' # 默认 PNG(如果无法提取)
|
||||
|
||||
def save_image_from_url(image_url):
|
||||
"""从 URL 下载图片并保留原始格式"""
|
||||
try:
|
||||
response = requests.get(image_url, stream=True)
|
||||
response.raise_for_status()
|
||||
|
||||
# 获取原始图片格式
|
||||
ext = get_file_extension(image_url)
|
||||
filename = f"{uuid.uuid4()}{ext}"
|
||||
save_path = os.path.join(COMFYUI_INPUT_DIR, filename)
|
||||
|
||||
with open(save_path, "wb") as f:
|
||||
for chunk in response.iter_content(1024):
|
||||
f.write(chunk)
|
||||
|
||||
return filename
|
||||
except Exception as e:
|
||||
print(f"Error saving image from URL: {e}")
|
||||
return None
|
||||
|
||||
def change(human_name, cloth_name, c_width, c_height):
|
||||
with open('/home/szlc/code/ComfyUI/change_cloth/change_new.json', 'r', encoding='utf-8') as file:
|
||||
@@ -154,32 +118,6 @@ def change(human_name, cloth_name, c_width, c_height):
|
||||
return out_img_name['filename']
|
||||
return None
|
||||
|
||||
@app.route('/change_cloth', methods=['POST'])
|
||||
def change_cloth():
|
||||
"""从 URL 下载图片"""
|
||||
data = request.json
|
||||
human_url = data.get("human_url")
|
||||
|
||||
if not human_url:
|
||||
return jsonify({"error": "Missing 'human_url' parameter"}), 400
|
||||
|
||||
human_filename = save_image_from_url(human_url)
|
||||
if not human_filename:
|
||||
return jsonify({"error": "Failed to download or save human image"}), 500
|
||||
|
||||
cloth_url = data.get("cloth_url")
|
||||
|
||||
if not cloth_url:
|
||||
return jsonify({"error": "Missing 'cloth_url' parameter"}), 400
|
||||
|
||||
cloth_filename = save_image_from_url(cloth_url)
|
||||
if not cloth_filename:
|
||||
return jsonify({"error": "Failed to download or save image"}), 500
|
||||
|
||||
|
||||
|
||||
return jsonify({"filename": cloth_filename})
|
||||
|
||||
def save_base64_image(base64_str, prefix):
|
||||
"""
|
||||
将base64字符串保存为图片文件
|
||||
@@ -254,6 +192,31 @@ def image_to_base64(file_path, mime_type=None):
|
||||
# 组合成Data URI格式
|
||||
return f"data:{mime_type};base64,{encoded_string}"
|
||||
|
||||
def process_change_cloth(human_filename, cloth_filename, output_format):
|
||||
w,h = get_image_dimensions(f'/home/szlc/code/ComfyUI/input/{human_filename}')
|
||||
|
||||
out_put_name = change(human_filename, cloth_filename, w, h)
|
||||
if out_put_name == None:
|
||||
return jsonify({"ret":-1, 'msg': 'Failed to change cloth'}), 500
|
||||
|
||||
image = Image.open(f'/home/szlc/code/ComfyUI/output/{out_put_name}')
|
||||
jpg_name = out_put_name.replace(".png", ".jpg")
|
||||
jpg_path_name = f'/home/szlc/code/ComfyUI/change_cloth/static/{jpg_name}'
|
||||
image.save(jpg_path_name, quality=95)
|
||||
|
||||
if 'base64' in output_format:
|
||||
return jsonify({
|
||||
"ret":0,
|
||||
"msg":"success",
|
||||
"data":image_to_base64(jpg_path_name)
|
||||
})
|
||||
else:
|
||||
return jsonify({
|
||||
"ret":0,
|
||||
"msg":"success",
|
||||
"url":f"http://112.126.94.241:18018/static/{jpg_name}"
|
||||
})
|
||||
|
||||
@app.route('/change_cloth_base64', methods=['POST'])
|
||||
def change_cloth_base64():
|
||||
# 获取参数
|
||||
@@ -279,32 +242,74 @@ def change_cloth_base64():
|
||||
if not cloth_filename:
|
||||
return jsonify({"ret":-1, 'msg': 'Failed to save cloth image'}), 500
|
||||
|
||||
w,h = get_image_dimensions(f'/home/szlc/code/ComfyUI/input/{human_filename}')
|
||||
|
||||
out_put_name = change(human_filename, cloth_filename, w, h)
|
||||
if out_put_name == None:
|
||||
return jsonify({"ret":-1, 'msg': 'Failed to change cloth'}), 500
|
||||
|
||||
image = Image.open(f'/home/szlc/code/ComfyUI/output/{out_put_name}')
|
||||
jpg_name = out_put_name.replace(".png", ".jpg")
|
||||
jpg_path_name = f'/home/szlc/code/ComfyUI/change_cloth/static/{jpg_name}'
|
||||
image.save(jpg_path_name, quality=95)
|
||||
|
||||
if 'base64' in output_format:
|
||||
return jsonify({
|
||||
"ret":0,
|
||||
"msg":"success",
|
||||
"data":image_to_base64(jpg_path_name)
|
||||
})
|
||||
else:
|
||||
return jsonify({
|
||||
"ret":0,
|
||||
"msg":"success",
|
||||
"url":f"http://112.126.94.241:18018/static/{jpg_name}"
|
||||
})
|
||||
return process_change_cloth(human_filename, cloth_filename, output_format)
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({"ret":-1, 'error': str(e)}), 500
|
||||
|
||||
def get_file_extension(url_or_filename):
|
||||
"""从 URL 或文件名中提取扩展名(如 .jpg、.png)"""
|
||||
# 处理 URL 情况(如 https://example.com/image.jpg?width=200)
|
||||
if url_or_filename.startswith(('http://', 'https://')):
|
||||
parsed = urlparse(url_or_filename)
|
||||
path = parsed.path
|
||||
else:
|
||||
path = url_or_filename
|
||||
|
||||
# 提取扩展名(转换为小写,去掉问号后的参数)
|
||||
ext = os.path.splitext(path)[1].lower().split('?')[0]
|
||||
return ext if ext else '.png' # 默认 PNG(如果无法提取)
|
||||
|
||||
def save_image_from_url(image_url):
|
||||
"""从 URL 下载图片并保留原始格式"""
|
||||
try:
|
||||
response = requests.get(image_url, stream=True)
|
||||
response.raise_for_status()
|
||||
|
||||
# 获取原始图片格式
|
||||
ext = get_file_extension(image_url)
|
||||
filename = f"{uuid.uuid4()}{ext}"
|
||||
filepath = os.path.join('/home/szlc/code/ComfyUI/change_cloth/static', filename)
|
||||
|
||||
with open(filepath, "wb") as f:
|
||||
for chunk in response.iter_content(1024):
|
||||
f.write(chunk)
|
||||
|
||||
input_filepath = os.path.join('/home/szlc/code/ComfyUI/input', filename)
|
||||
with open(input_filepath, "wb") as f:
|
||||
for chunk in response.iter_content(1024):
|
||||
f.write(chunk)
|
||||
|
||||
return filename
|
||||
except Exception as e:
|
||||
print(f"Error saving image from URL: {e}")
|
||||
return None
|
||||
|
||||
@app.route('/change_cloth', methods=['POST'])
|
||||
def change_cloth():
|
||||
"""从 URL 下载图片"""
|
||||
data = request.json
|
||||
human_url = data.get("human_url")
|
||||
|
||||
if not human_url:
|
||||
return jsonify({"error": "Missing 'human_url' parameter"}), 400
|
||||
|
||||
human_filename = save_image_from_url(human_url)
|
||||
if not human_filename:
|
||||
return jsonify({"error": "Failed to download or save human image"}), 500
|
||||
|
||||
cloth_url = data.get("cloth_url")
|
||||
|
||||
if not cloth_url:
|
||||
return jsonify({"error": "Missing 'cloth_url' parameter"}), 400
|
||||
|
||||
cloth_filename = save_image_from_url(cloth_url)
|
||||
if not cloth_filename:
|
||||
return jsonify({"error": "Failed to download or save image"}), 500
|
||||
|
||||
output_format = data.get('output_format')
|
||||
|
||||
return process_change_cloth(human_filename, cloth_filename, output_format)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host="0.0.0.0", port=8018, debug=True)
|
||||
Reference in New Issue
Block a user