Initial commit v2
parent
6ee4c5312b
commit
30c7b90032
|
@ -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()
|
|
@ -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)
|
|
@ -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
|
||||||
|
```
|
|
@ -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()
|
|
@ -0,0 +1,2 @@
|
||||||
|
redis
|
||||||
|
pillow
|
Loading…
Reference in New Issue