91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
import sys
|
|
import socket
|
|
import time
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python3 generate_image.py <IP_ADDRESS> [TEXT]")
|
|
sys.exit(1)
|
|
|
|
IP_ADDRESS = sys.argv[1]
|
|
PORT = 4242
|
|
TEXT_TO_DRAW = sys.argv[2] if len(sys.argv) > 2 else "Hello from Python!"
|
|
|
|
WIDTH = 400
|
|
HEIGHT = 300
|
|
|
|
# Create a new image with white background (1 = White, 0 = Black)
|
|
image = Image.new('1', (WIDTH, HEIGHT), 1)
|
|
draw = ImageDraw.Draw(image)
|
|
|
|
print("Generating pattern...")
|
|
|
|
# Draw Borders
|
|
draw.rectangle([(0, 0), (WIDTH-1, HEIGHT-1)], outline=0, width=3)
|
|
|
|
# Draw Diagonal Cross
|
|
draw.line([(0, 0), (WIDTH-1, HEIGHT-1)], fill=0, width=2)
|
|
draw.line([(0, HEIGHT-1), (WIDTH-1, 0)], fill=0, width=2)
|
|
|
|
# Draw a filled box in the center
|
|
center_x = WIDTH // 2
|
|
center_y = HEIGHT // 2
|
|
box_size = 50
|
|
draw.rectangle([(center_x - box_size, center_y - box_size),
|
|
(center_x + box_size, center_y + box_size)], fill=0)
|
|
|
|
# Draw Text
|
|
try:
|
|
# Try to load a nice font
|
|
# On macOS, Arial is usually available.
|
|
font = ImageFont.truetype("/Library/Fonts/Arial.ttf", 36)
|
|
except IOError:
|
|
try:
|
|
# Try Linux path
|
|
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 36)
|
|
except IOError:
|
|
print("Warning: Could not load custom font, using default.")
|
|
font = ImageFont.load_default()
|
|
|
|
# Calculate text size
|
|
try:
|
|
# Pillow >= 9.2.0
|
|
left, top, right, bottom = draw.textbbox((0, 0), TEXT_TO_DRAW, font=font)
|
|
text_width = right - left
|
|
text_height = bottom - top
|
|
except AttributeError:
|
|
# Older Pillow
|
|
text_width, text_height = draw.textsize(TEXT_TO_DRAW, font=font)
|
|
|
|
text_x = (WIDTH - text_width) // 2
|
|
text_y = 40 # Top area
|
|
|
|
# Draw white background for text so it's readable
|
|
padding = 10
|
|
draw.rectangle([(text_x - padding, text_y - padding),
|
|
(text_x + text_width + padding, text_y + text_height + padding)],
|
|
fill=1, outline=0)
|
|
|
|
# Draw text
|
|
draw.text((text_x, text_y), TEXT_TO_DRAW, font=font, fill=0)
|
|
|
|
# Convert to bytes
|
|
# PIL tobytes for mode '1' packs 8 pixels per byte, MSB first.
|
|
buffer = image.tobytes()
|
|
|
|
print(f"Connecting to {IP_ADDRESS}:{PORT}...")
|
|
|
|
try:
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
s.connect((IP_ADDRESS, PORT))
|
|
print("Connected. Sending command...")
|
|
s.sendall(b"/image\n")
|
|
time.sleep(0.5) # Small delay to ensure command is processed
|
|
print(f"Sending {len(buffer)} bytes of image data...")
|
|
s.sendall(buffer)
|
|
time.sleep(1)
|
|
print("Done.")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|