Spaces:
Runtime error
Runtime error
File size: 3,561 Bytes
5fbd25d |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# -*- coding: utf-8 -*-
""" File utils
Use for managing generated files
@file: file_utils.py
@author: Konie
@update: 2024-03-22
"""
import base64
import datetime
import shutil
from io import BytesIO
import os
from pathlib import Path
import numpy as np
from PIL import Image
from fooocusapi.utils.logger import logger
output_dir = os.path.abspath(os.path.join(
os.path.dirname(__file__), '../..', 'outputs', 'files'))
os.makedirs(output_dir, exist_ok=True)
STATIC_SERVER_BASE = 'http://127.0.0.1:8888/files/'
def save_output_file(
img: np.ndarray | str,
image_name: str = '',
extension: str = 'png') -> str:
"""
Save np image to file
Args:
img: np.ndarray image to save
image_name: str of image name
extension: str of image extension
Returns:
str of file name
"""
current_time = datetime.datetime.now()
date_string = current_time.strftime("%Y-%m-%d")
filename = os.path.join(date_string, image_name + '.' + extension)
file_path = os.path.join(output_dir, filename)
os.makedirs(os.path.dirname(file_path), exist_ok=True)
try:
if isinstance(img, str):
shutil.move(img, file_path)
return Path(file_path).as_posix()
except Exception:
raise Exception
def delete_output_file(filename: str):
"""
Delete files specified in the output directory
Args:
filename: str of file name
"""
file_path = os.path.join(output_dir, filename)
if not os.path.exists(file_path) or not os.path.isfile(file_path):
logger.std_warn(f'[Fooocus API] {filename} not exists or is not a file')
try:
os.remove(file_path)
logger.std_info(f'[Fooocus API] Delete output file: {filename}')
return True
except OSError:
logger.std_error(f'[Fooocus API] Delete output file failed: {filename}')
return False
def output_file_to_base64img(filename: str | None) -> str | None:
"""
Convert an image file to a base64 string.
Args:
filename: str of file name
return: str of base64 string
"""
if filename is None:
return None
file_path = os.path.join(output_dir, filename)
if not os.path.exists(file_path) or not os.path.isfile(file_path):
return None
ext = filename.split('.')[-1]
if ext.lower() not in ['png', 'jpg', 'webp', 'jpeg']:
ext = 'png'
img = Image.open(file_path)
output_buffer = BytesIO()
img.save(output_buffer, format=ext.upper())
byte_data = output_buffer.getvalue()
base64_str = base64.b64encode(byte_data).decode('utf-8')
return f"data:image/{ext};base64," + base64_str
def output_file_to_bytesimg(filename: str | None) -> bytes | None:
"""
Convert an image file to a bytes string.
Args:
filename: str of file name
return: bytes of image data
"""
if filename is None:
return None
file_path = os.path.join(output_dir, filename)
if not os.path.exists(file_path) or not os.path.isfile(file_path):
return None
img = Image.open(file_path)
output_buffer = BytesIO()
img.save(output_buffer, format='PNG')
byte_data = output_buffer.getvalue()
return byte_data
def get_file_serve_url(filename: str | None) -> str | None:
"""
Get the static serve url of an image file.
Args:
filename: str of file name
return: str of static serve url
"""
if filename is None:
return None
return STATIC_SERVER_BASE + '/'.join(filename.split('/')[-2:])
|