1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
from utils import (
draw_with_border,
get_colors,
get_quote,
messages_multiline,
randomize_location,
set_font,
)
from PIL import Image, ImageDraw
from twython import Twython
import csv
import random
import os
from api import consumer_key, consumer_secret, access_token, access_token_secret
from datetime import datetime
twitter = Twython(consumer_key, consumer_secret, access_token, access_token_secret)
def post():
with open("files.csv") as f:
reader = csv.reader(f)
chosen_row = random.choice(list(reader))
source = chosen_row[1]
file_extension = chosen_row[2].split(".")[1]
filename = "pics/" + chosen_row[2]
text = get_quote("texts/quotes.txt")
image = Image.open(filename)
font = set_font(image, text) # get font size based on image size
draw = ImageDraw.Draw(image)
lines = messages_multiline(text, font, image) # split up lines for text wrapping
colors = get_colors(image.filename) # get colors
(x, y, faces) = randomize_location(
image, lines, font
) # where to start drawing text
for line in lines:
height = font.getsize(line[1])[1]
draw_with_border(x, y, line, colors[0], colors[1], font, draw)
y = y + height
image.save(f"to_tweet.{file_extension}")
photo = open(f"to_tweet.{file_extension}", "rb")
response = twitter.upload_media(media=photo)
message = f"{text} ({source})"
print(filename, message)
twitter.update_status(status=message, media_ids=[response["media_id"]])
photo.close()
os.remove(photo.name)
with open("log", "a") as f:
f.write(
f"{datetime.now().strftime('%d-%m-%Y %H:%M:%S')}\t{filename}\t({image.size[0]} {image.size[1]})\t{font.size} ({max((font.size // 25), 2)})\t{text}\n"
)
post()
|