Skip to content

Commit e5b9744

Browse files
author
Hongbin Huang
committed
chore: sync from origin repo - include metadata when encoding to base64.
1 parent 19b0147 commit e5b9744

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

easyai/image.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
import base64
22
import io
33

4-
from PIL import Image
4+
from PIL import Image, PngImagePlugin
55

66

7-
def b64_img(image: Image):
8-
buffered = io.BytesIO()
9-
image.save(buffered, format="PNG")
10-
img_base64 = "data:image/png;base64," + str(
11-
base64.b64encode(buffered.getvalue()), "utf-8"
12-
)
13-
return img_base64
7+
def b64_img(image: Image) -> str:
8+
return "data:image/png;base64," + raw_b64_img(image)
149

1510

16-
def raw_b64_img(image: Image):
11+
def raw_b64_img(image: Image) -> str:
1712
# XXX controlnet only accepts RAW base64 without headers
18-
buffered = io.BytesIO()
19-
image.save(buffered, format="PNG")
20-
img_base64 = str(base64.b64encode(buffered.getvalue()), "utf-8")
21-
return img_base64
13+
with io.BytesIO() as output_bytes:
14+
metadata = None
15+
for key, value in image.info.items():
16+
if isinstance(key, str) and isinstance(value, str):
17+
if metadata is None:
18+
metadata = PngImagePlugin.PngInfo()
19+
metadata.add_text(key, value)
20+
image.save(output_bytes, format="PNG", pnginfo=metadata)
21+
22+
bytes_data = output_bytes.getvalue()
23+
24+
return str(base64.b64encode(bytes_data), "utf-8")

0 commit comments

Comments
 (0)