7
7
import modules .shared as shared
8
8
from modules .api .models import *
9
9
from modules .processing import StableDiffusionProcessingTxt2Img , StableDiffusionProcessingImg2Img , process_images
10
- from modules .sd_samplers import all_samplers , sample_to_image , samples_to_image_grid
10
+ from modules .sd_samplers import all_samplers
11
11
from modules .extras import run_extras , run_pnginfo
12
+ from PIL import PngImagePlugin
12
13
13
14
14
15
def upscaler_to_index (name : str ):
@@ -31,9 +32,21 @@ def setUpscalers(req: dict):
31
32
32
33
33
34
def encode_pil_to_base64 (image ):
34
- buffer = io .BytesIO ()
35
- image .save (buffer , format = "png" )
36
- return base64 .b64encode (buffer .getvalue ())
35
+ with io .BytesIO () as output_bytes :
36
+
37
+ # Copy any text-only metadata
38
+ use_metadata = False
39
+ metadata = PngImagePlugin .PngInfo ()
40
+ for key , value in image .info .items ():
41
+ if isinstance (key , str ) and isinstance (value , str ):
42
+ metadata .add_text (key , value )
43
+ use_metadata = True
44
+
45
+ image .save (
46
+ output_bytes , "PNG" , pnginfo = (metadata if use_metadata else None )
47
+ )
48
+ bytes_data = output_bytes .getvalue ()
49
+ return base64 .b64encode (bytes_data )
37
50
38
51
39
52
class Api :
0 commit comments