save code
This commit is contained in:
+90
-85
@@ -72,42 +72,6 @@ def GetPicDesc(img_url):
|
|||||||
|
|
||||||
return result
|
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):
|
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:
|
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 out_img_name['filename']
|
||||||
return None
|
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):
|
def save_base64_image(base64_str, prefix):
|
||||||
"""
|
"""
|
||||||
将base64字符串保存为图片文件
|
将base64字符串保存为图片文件
|
||||||
@@ -254,6 +192,31 @@ def image_to_base64(file_path, mime_type=None):
|
|||||||
# 组合成Data URI格式
|
# 组合成Data URI格式
|
||||||
return f"data:{mime_type};base64,{encoded_string}"
|
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'])
|
@app.route('/change_cloth_base64', methods=['POST'])
|
||||||
def change_cloth_base64():
|
def change_cloth_base64():
|
||||||
# 获取参数
|
# 获取参数
|
||||||
@@ -279,32 +242,74 @@ def change_cloth_base64():
|
|||||||
if not cloth_filename:
|
if not cloth_filename:
|
||||||
return jsonify({"ret":-1, 'msg': 'Failed to save cloth image'}), 500
|
return jsonify({"ret":-1, 'msg': 'Failed to save cloth image'}), 500
|
||||||
|
|
||||||
w,h = get_image_dimensions(f'/home/szlc/code/ComfyUI/input/{human_filename}')
|
return process_change_cloth(human_filename, cloth_filename, output_format)
|
||||||
|
|
||||||
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}"
|
|
||||||
})
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"ret":-1, 'error': str(e)}), 500
|
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__':
|
if __name__ == '__main__':
|
||||||
app.run(host="0.0.0.0", port=8018, debug=True)
|
app.run(host="0.0.0.0", port=8018, debug=True)
|
||||||
Reference in New Issue
Block a user