From 30c7b9003298ff9b4dd3d2139c860b7ed305c4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Sun, 22 Feb 2015 02:00:47 +0100 Subject: [PATCH] Initial commit v2 --- v2/png_creator.py | 30 ++++++++++++++++++++++++++++++ v2/png_merger.py | 38 ++++++++++++++++++++++++++++++++++++++ v2/readme.md | 27 +++++++++++++++++++++++++++ v2/receiver.py | 39 +++++++++++++++++++++++++++++++++++++++ v2/requirements.txt | 2 ++ 5 files changed, 136 insertions(+) create mode 100644 v2/png_creator.py create mode 100644 v2/png_merger.py create mode 100644 v2/readme.md create mode 100644 v2/receiver.py create mode 100644 v2/requirements.txt diff --git a/v2/png_creator.py b/v2/png_creator.py new file mode 100644 index 0000000..3b19381 --- /dev/null +++ b/v2/png_creator.py @@ -0,0 +1,30 @@ +#!/usr/bon/env python + +from PIL import Image + +import socket +import random +import time + +HOST, PORT = "localhost", 9999 + +nb_images = 10 + +for i in range(nb_images): + r = random.randint(0, 255) + g = random.randint(0, 255) + b = random.randint(0, 255) + img1 = Image.new('RGBA', (100, 100), (r, g, b, 128)) + data = img1.tobytes() + + try: + # Create a socket (SOCK_STREAM means a TCP socket) + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((HOST, PORT)) + + # Connect to server and send data + sock.sendall(bytes(data)) + time.sleep(2) + + finally: + sock.close() diff --git a/v2/png_merger.py b/v2/png_merger.py new file mode 100644 index 0000000..cb2a1d5 --- /dev/null +++ b/v2/png_merger.py @@ -0,0 +1,38 @@ +#!/usr/bon/env python + +from PIL import Image + +import redis +import datetime +import time + + +def merge(r): + if not r.exists('new'): + return None + now = datetime.datetime.now().isoformat() + r.rename('new', now) + new_imgs = r.smembers(now) + print('got new images', len(new_imgs)) + r.delete(now) + if len(new_imgs) == 1: + image = Image.frombytes('RGBA', (100, 100), list(new_imgs)[0]) + image.save(now + '.png', 'png') + else: + images = [] + for i in new_imgs: + try: + images.append(Image.frombytes('RGBA', (100, 100), i)) + except: + continue + if len(images) == 2: + img_alpha = Image.alpha_composite(*images) + images = [img_alpha] + img_alpha.save(now + '.png', 'png') + + +if __name__ == "__main__": + r = redis.Redis() + while True: + merge(r) + time.sleep(10) diff --git a/v2/readme.md b/v2/readme.md new file mode 100644 index 0000000..3bbbd0b --- /dev/null +++ b/v2/readme.md @@ -0,0 +1,27 @@ +Installation +============ + +``` + pip install -r requirements.txt +``` + +Usage +===== + +Run the listener receiving the images from the clients: + +``` + python receiver.py +``` + +Run the script merging the images: + +``` + python png_merger.py +``` + +Run the scripts sending the images: + +``` + python png_creator.py +``` diff --git a/v2/receiver.py b/v2/receiver.py new file mode 100644 index 0000000..1fc3e9e --- /dev/null +++ b/v2/receiver.py @@ -0,0 +1,39 @@ +#!/usr/bon/env python + +import socketserver +import redis + + +class MyTCPHandler(socketserver.BaseRequestHandler): + """ + The RequestHandler class for our server. + + It is instantiated once per connection to the server, and must + override the handle() method to implement communication to the + client. + """ + + def handle(self): + r = redis.Redis() + data = None + while True: + temp = self.request.recv(1024).strip() + if data is None: + data = temp + else: + data += temp + if len(temp) == 0: + break + print("{} sent a packet".format(self.client_address[0])) + r.sadd('new', data) + + +if __name__ == "__main__": + HOST, PORT = "localhost", 9999 + + # Create the server, binding to localhost on port 9999 + server = socketserver.TCPServer((HOST, PORT), MyTCPHandler) + + # Activate the server; this will keep running until you + # interrupt the program with Ctrl-C + server.serve_forever() diff --git a/v2/requirements.txt b/v2/requirements.txt new file mode 100644 index 0000000..5182e58 --- /dev/null +++ b/v2/requirements.txt @@ -0,0 +1,2 @@ +redis +pillow