66 lines
No EOL
2.9 KiB
Python
66 lines
No EOL
2.9 KiB
Python
input_files = [['test_document.txt', 'CiAgICBUaGlzIGlzIGEgdGVzdCB0ZXh0IGZpbGUgZm9yIHRoZSBDaGF0TWFuYWdlciB3b3JrZmxvdy4KICAgIEl0IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gZm9yIHRlc3RpbmcgZG9jdW1lbnQgcHJvY2Vzc2luZy4KICAgIAogICAgVGhlIENoYXRNYW5hZ2VyIHNob3VsZCBiZSBhYmxlIHRvIHByb2Nlc3MgdGhpcyBmaWxlCiAgICBhbmQgZXh0cmFjdCByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIGl0LgogICAgCiAgICBUaGlzIGZpbGUgc2VydmVzIGFzIGFuIGV4YW1wbGUgZm9yIHRleHQtYmFzZWQgZG9jdW1lbnRzIHRoYXQgY2FuIGJlCiAgICB1c2VkIGluIGEgY2hhdCB3b3JrZmxvdy4KICAgIA==', True], ['test_document.txt', '\n This is a test text file for the ChatManager workflow.\n It contains some information for testing document processing.\n \n The ChatManager should be able to process this file\n and extract relevant information from it.\n \n This file serves as an example for text-based documents that can be\n used in a chat workflow.\n ', False], ['test_image.png', 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAA40lEQVR4nO3QsQEAIAyAsOr/P+sLZU9mJs4btu66xKzCrMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArMCswKzArNn7il4Bx2GaB88AAAAASUVORK5CYII=', True], ['test_image.png', 'Image (100x100, PNG, RGB)', False]] # DO NOT CHANGE THIS LINE
|
|
|
|
# REQUIREMENTS: Pillow==10.0.0
|
|
|
|
import base64
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
import io
|
|
|
|
# Initialize result dictionary
|
|
result = {}
|
|
|
|
# Helper function to decode base64 data
|
|
def decode_base64(data: str) -> bytes:
|
|
return base64.b64decode(data)
|
|
|
|
# Extract input files
|
|
text_data = None
|
|
image_data = None
|
|
|
|
for file_info in input_files:
|
|
filename, data, is_base64 = file_info
|
|
if filename == 'test_document.txt' and not is_base64:
|
|
text_data = data
|
|
elif filename == 'test_image.png' and is_base64:
|
|
image_data = decode_base64(data)
|
|
|
|
# Validate inputs
|
|
if text_data is None:
|
|
raise ValueError("Text data not found in input files.")
|
|
if image_data is None:
|
|
raise ValueError("Image data not found in input files.")
|
|
|
|
# Load image
|
|
image = Image.open(io.BytesIO(image_data))
|
|
|
|
# Prepare to draw on the image
|
|
draw = ImageDraw.Draw(image)
|
|
|
|
# Use a basic font
|
|
try:
|
|
font = ImageFont.truetype("arial", 15)
|
|
except IOError:
|
|
font = ImageFont.load_default()
|
|
|
|
# Define text position
|
|
text_position = (10, 10)
|
|
|
|
# Overlay text onto image
|
|
draw.text(text_position, text_data, font=font, fill=(255, 255, 255))
|
|
|
|
# Save the resulting image to a bytes buffer
|
|
output_buffer = io.BytesIO()
|
|
image.save(output_buffer, format='PNG')
|
|
output_buffer.seek(0)
|
|
|
|
#result['integrated_image.png'] = base64.b64encode(output_buffer.getvalue()).decode('utf-8')
|
|
# binary_data = base64.b64decode(pic_str)
|
|
binary_data=output_buffer.getvalue()
|
|
|
|
# Write the binary data to a file
|
|
with open("./static/test_output.png", "wb") as f:
|
|
f.write(binary_data)
|
|
|
|
print("OK")
|
|
# Output the result dictionary
|
|
result |