1
0
Fork 0
mirror of https://gitlab.com/oloturia/fumcaso.git synced 2025-01-04 20:47:16 +01:00

added alt text feature

This commit is contained in:
oloturia 2023-02-24 02:11:30 +01:00
parent 5c9473fcc9
commit e09d901ecb
5 changed files with 200 additions and 22 deletions

View file

@ -44,6 +44,7 @@ Configuration is JSON file. This is an example:
csvSpeech: name of file containing speech
csvSubs: name of file containing substitutions in text
csvObj: name of file containing information about objects location
csvAltText: name of file containing alternate text
xSize: width of the final image
ySize: height of the final image
panelLength: length of a single panel (roughly panelLength * number-of-panels should be = xSize)

View file

@ -11,6 +11,7 @@
"csvSpeech": "rtext.csv",
"csvSubs": "subs.csv",
"csvObj": "obj.csv",
"csvAltText": "alttext.csv",
"font": "./ubuntu.ttf",
"fontSize": 22,
"xSize":2400,
@ -44,6 +45,7 @@
"csvSpeech": "rtext.csv",
"csvSubs": "subs.csv",
"csvObj": "obj.csv",
"csvAltText": "alttext.csv",
"font": "./ubuntu.ttf",
"fontSize": 22,
"xSize":2400,
@ -77,6 +79,7 @@
"csvSpeech": "rtext.csv",
"csvSubs": "subs.csv",
"csvObj": "obj.csv",
"csvAltText": "alttext.csv",
"font": "./ubuntu.ttf",
"fontSize": 22,
"xSize":2400,

View file

@ -15,12 +15,12 @@ def publishStrip(altProfile=False,user=False):
createapp = [x.strip() for x in createapp]
TOKEN = createapp[0]
mastodon = Mastodon(access_token = TOKEN,api_base_url = API_URL)
status = createStrip(config)
status,altText = createStrip(config,altTextRequested=True)
if status == 0:
published = False
for i in range(1,100):
try:
new_strip = mastodon.media_post(config["saveLocation"]+config["filename"],"image/png")
new_strip = mastodon.media_post(config["saveLocation"]+config["filename"],"image/png",description=altText)
if not(user):
mastodon.status_post(config["text"],media_ids=new_strip)
else:

151
oloturia/alttext.csv Normal file
View file

@ -0,0 +1,151 @@
A00.png;un tizio dice: «$1»
A01.png;un tizio arrabbiato dice: «$1»
A02.png;un tizio dice con fare risoluto: «$1»
A03.png;un tizio ha in mano un pacco e dice: «$1»
A04.png;didascalia: poco dopo
A05.png;il tizio rimane in silenzio
A06.png;il tizio apre il pacco
A07.png;c'è cazzopollo e il tizio esclama: «$1»
A08.png;il tizio arrabbiato esclama: «$1»
A09.png;il tizio con fare risoluto dice: «$1»
A10.png;esplode tutto
A11.png;il tizio ha estratto dal pacco $0
A12.png;il tizio viene inondato dallo spruetz di cazzopollo
A13.png;c'è un tizio su un'isola deserta
A14.png;il tizio dice: «$1»
A15.png;inizia a piovere
A16.png;il tizio sta in silenzio sull'isola
A17.png;il tizio sta in silenzio sull'isola
A18.png;il tizio sta in silenzio sull'isola
A19.png;un tizio osserva il tramonto e pensa: «$1»
A20.png;didascalia: molti anni dopo...
A21.png;il tizio pensa
A22.png;il tizio pensa: «$1»
A23.png;il tizio suda e pensa: «$1»
A24.png;il tizio allarmato pensa: «$1»
A25.png;un tizio legge un fumetto e dice: «$1»
A26.png;il tizio con fare risoluto pensa: «$1»
A27.png;il tizio soddisfatto pensa: «$1»
A28.png;un tizio è su una astronave e dice: «$1»
A29.png;il tizio pianta una bandiera che rappresenta $0 su un pianeta e dice: «$1»
A30.png;il tizio è nel matrix e dice: «$1»
A31.png;l'allarme dice: «$1», il tizio urla «$2»
A32.png;l'astronave segue il cartello «$1» mentre una voce fuori campo commenta: «$2»
ART00.png;un tizio va alla galleria d'arte e pensa: «$1»
ART01.png;il tizio guarda un'opera d'arte e pensa: «$1»
ART02.png;il tizio guarda l'opera con fare pensoso
ART03.png;il tizio esclama: «$1»
B00.0.png;un tizio dice: «$1», un altro risponde: «$2»
B00.1.png;un tizio sbuca e dice: «$1», un altro risponde: «$2»
B00.2.png;un tizio dice: «$1», un altro risponde: «$2»
B00.3.png;una guardia mostra il distintivo e dice: «$1» e un tizio risponde «$2»
B01.png;il primo è arrabbiato e dice: «$1», il secondo calmo risponde: «$2»
B02.png;il primo risponde nervosamente: «$1», il secondo furioso dice: «$2»
B03.png;il primo porge un pacco dicendo: «$1», il secondo risponde: «$2»
B04.png;didascalia: poco dopo
B05.png;il primo tizio perplesso dice: «$1», il secondo nervosamente esclama: «$2»
B06.png;il primo tizio perplesso dice: «$1», il secondo scocciato se ne va dicendo: «$2»
B07.png;il secondo tizio ringrazia dicendo: «$1»
B08.png;arriva cazzopollo ed entrambi dicono: «$1»
B09.0.png;il primo tizio spara al secondo
B09.1.png;il secondo tizio spara al primo
B10.png;il secondo tizio mostra le natiche al primo
B11.png;il secondo tizio vomita mentre il primo esclama: «$1»
B12.png;il tizio rimasto urla: «$1»
B13.png;dentro il pacco c'era $0 il tizio è soddisfatto
B14.png;dentro il pacco c'era $0 il tizio è insoddisfatto
B15.png;i due ridono
B16.png;cazzopollo ricopre i due con abbondante spruetz
B20.png;un tizio guarda la tv e dice: «$1» la TV fa $2
B21.0.png;la TV fa $2
B22.png;il tizio è innervosito e dice: «$1»
B24.png;didascalia: nel frattempo
B25.0.png;il tizio ridendo dice: «$1»
B26.0.png;il tizio cambia canale
B21.1.png;la TV fa: «$1»
B25.1.png;il tizio ridendo dice: «$1»
B26.1.png;il tizio cambia canale
B21.2.png;la TV fa: «$1»
B23.png;il tizio lancia il telecomando alla TV
B27.png;il tizio spegne la TV e dice: «$1»
B28.png;al ristorante un tizio ordina: «$1» e il cameriere: «$2»
B29.png;il cameriere propone: «$1» e il cliente risponde: «$2»
B30.png;il cliente assaggia il vino
B31.png;il cliente soddisfatto dice: «$1» e il cameriere ringrazia: «$2»
B32.png;il cliente vomita: «$1» e il cameriere si scusa: «$2»
C01.png;Capitan Pelato riassunto: «$1»
C02.png;Capitan Pelato corre
C03.png;Capitan Pelato corre
C04.png;Capitan Pelato prende fiato
C05.png;Capitan Pelato corre ed esclama: «$1»
C06.png;Capitan Pelato corre
MUS00.png;Lo sponsor $1 presenta
MUS01.png;Il $1 festival di $2 il presentatore dice: «$3»
MUS02.png;La presentatrice dice: «$1»
MUS03.png;La band canta «$1 $2 $3»
O00.0.png;Frontespizio di Dylan Bugo in $1 $2
O00.1.png;Frontespizio di Nathan Nuca in $1 $2
O00.2.png;Frontespizio di Quando meno te l'aspetti Cazzopollo
O00.3.png;Frontespizio di Juliana l'investigatrice matta in $1 $2
O01.png;Dylan Bugo spara a un mostro urlando: «$1»
O02.png;Dylan Bugo è minacciato da un mostro che urla: «$2» e Dylan risponde: «$1»
O04.png;Dylan Bugo è consolato dall'assistente che dice: «$1» davanti a loro ceneri fumanti
O05.png;Dylan Bugo dice: «$1»
PRE00.png;Previsioni del tempo
PRE01.png;Il tizio delle previsioni dice: «$1» mentre mostra la cartina d'Italia
PRE02.png;Il tizio delle previsioni dice: «$1» mentre mostra le massime ($3) e le minime ($4) di $2
Q00.png;Inizia Bingu; episodio $1 dal titolo $2
Q01.png;Ci sono Bingu e Binga
Q02.0.png;Bingu e Binga dicono «$1» e «$2»
Q02.1.png;Bingu e Binga stanno in silenzio
Q03.png;Bingu soffre di meteorismo
Q04.png;Inizia il programma L'ispettore $1 con $2
Q05.png;Un poliziotto dice: «$1»
Q06.png;L'ispettore dice: «$1» e il poliziotto esclama: «$2»
Q07.png;Cambio canale
Q08.png;Trasmissione in cucina con: $1
Q09.png;Il cuoco dice: «$1»
Q10.png;Il cuoco mescola e dice: «$1»
Q11.png;Il cuoco mostra il preparato e dice: «$1»
Q12.png;Il cuoco ha messo il tutto in forno e dice: «$1»
Q13.png;Il cuoco assaggia e dice: «$1»
Q14.png;Il cuoco vomita
Q15.png;Il cuoco si lecca i baffi e dice: «$1»
Q16.png;I due litigano uno dice «$1» e l'altro risponde «$2»
Q17.png;Il presentatore dice: «$1»
Q18.png;I due si azzuffano dicendo: «$1» e il presentatore esclama: «$2»
Q19.png;Uno dei due se ne va dicendo: «$1»
Q20.png;La pubblicità dice: «$1»
Q21.png;La pubblicità dice: «$1» mentre mostra un $0
Q22.png;La pubblicità dice: «$1»
Q23.png;La pubblicità dice: «$1»
Q24.png;Inizia Super Quork
Q25.png;C'è un animale in un bosco e la voce dice: «$1»
Q26.png;La voce dice: «$1»
Q27.png;La voce dice: «$1»
Q28.png;La voce dice: «$1»
Q29.png;Inizia Super Quork
Q30.png;La voce dice: «$1»
SET00.png;Un tizio sulla spiaggia sotto l'ombrellone dice: «$1»
SET01.png;Il tizio dice: «$1»
SET02.png;Il tizio pensa
SET03.png;Il tizio scrive: $1
SET04.png;Il tizio pensa: «$1»
U00.png;Degli ufo attaccano la città e un tizio esclama: «$1»
OBJ00.png;un biglietto 'puppa'
OBJ01.png;una banana
OBJ02.png;un cactus
OBJ03.png;una bomba
OBJ04.png;una dentiera
OBJ05.png;un dildo
OBJ06.png;un coso
OBJ07.png;una papera
OBJ08.png;una banconota da 10€
OBJ09.png;una scatola
OBJ10.png;una trombetta
OBJ11.png;un libro di B.Vespa
OBJ12.png;un fiore
OBJ13.png;un razzo
OBJ14.png;una torta
OBJ15.png;una foto di natiche
OBJ16.png;un CD di Bugo
Can't render this file because it has a wrong number of fields in line 97.

View file

@ -84,37 +84,54 @@ def addThing(indVign,config):
objects.append( (row[random.randint(3,len(row)-1)],row[1],row[2] ))
return objects
def fetchAltText(config,csvFile,indVign):
"""Function to fetch the correct alt text for the image"""
if os.path.exists(config["csvLocation"]+"/"+config["csvAltText"]):
with open(csvFile) as alt_text_csv:
csvReader = csv.reader(alt_text_csv,delimiter=";")
for row in csvReader:
if row[0] == indVign:
return row[1]
else:
return ""
def writeStrip(story,config):
"""This function creates the strip returning an image object that could be saved or viewed. It takes an array with filenames as parameter
The first image is always 000, then appends to strip the files, then decorates it fetching text and adding objects. If the object is an R, then
repeats the last object."""
repeats the last object. It also generates alt text if setted correctly in the config file."""
strip = []
alt_text = ""
for indVign in story:
try:
vign = Image.open(config["imagesLocation"]+"/"+indVign).convert('RGBA')
addtext = ImageDraw.Draw(vign)
fnt = ImageFont.truetype(config["font"],config["fontSize"])
textVign = fetchText(indVign,config)
if textVign!=0:
text_vign_ind = fetchText(indVign,config)
ind_text_vign = 1
alt_text += fetchAltText(config,config["csvLocation"]+"/"+config["csvAltText"],indVign)+"\n"
if text_vign_ind!=0:
try:
for x in range(len(textVign[0])):
text_vign = textVign[1][x]
for x in range(len(text_vign_ind[0])):
text_vign = text_vign_ind[1][x]
try:
while text_vign.find('$') != -1:
text_vign = replaceText(text_vign,config)
except AttributeError as err:
print("Problem parsing:")
print(textVign)
print(text_vign_ind)
print(err)
quit()
while '$'+str(ind_text_vign) in alt_text:
alt_text = alt_text.replace('$'+str(ind_text_vign),text_vign.replace('@'," "))
ind_text_vign += 1
text_vign = text_vign.replace('@','\n')
addtext.multiline_text((int(textVign[0][x][0]),int(textVign[0][x][1])),text_vign,fill="#000000",font=fnt,align="center")
addtext.multiline_text((int(text_vign_ind[0][x][0]),int(text_vign_ind[0][x][1])),text_vign,fill="#000000",font=fnt,align="center")
text_vign = ""
except TypeError:
print("Problem finding text for:")
print(indVign)
quit()
obj_list = addThing(indVign,config)
if obj_list!=0:
for obj in obj_list:
@ -127,8 +144,9 @@ def writeStrip(story,config):
vign.paste(objImg,(int(obj[1]),int(obj[2])),objImg)
except ValueError:
vign.paste(objImg,(int(obj[1]),int(obj[2])))
if "$0" in alt_text:
alt_text = alt_text.replace("$0",fetchAltText(config,config["csvLocation"]+"/"+config["csvAltText"],obj_list[0][0])+" ")
strip.append(vign)
except FileNotFoundError:
pass
image = Image.new('RGBA',(config["xSize"],config["ySize"]))
@ -137,20 +155,23 @@ def writeStrip(story,config):
image.paste(vign,(xshift,0))
xshift += config["panelLength"]
ImageDraw.Draw(image).rectangle([0,0,config["xSize"]-1,config["ySize"]-1], fill=None, outline="black", width=1)
return image
return image,alt_text
def createStrip(config,specialPlatform=""):
"""Create strip and save it
def createStrip(config,specialPlatform="",altTextRequested=False):
"""Create strip and save it, if altTextRequested is True then returns also the alt text
createStrip(str path/filename)"""
try:
story = fetchVign(config)
finalStrip = writeStrip(story,config)
finalStrip,altText = writeStrip(story,config)
if specialPlatform == "android":
return finalStrip
else:
finalStrip.save(config["saveLocation"]+config["filename"])
return 0
if altTextRequested:
return 0,altText
else:
return 0
except Exception as err:
return err
@ -178,6 +199,7 @@ def readConfig(profile=False,platform=False):
csvSpeech = config[profile]["csvSpeech"]
csvSubs = config[profile]["csvSubs"]
csvObj = config[profile]["csvObj"]
csvAltText = config[profile]["csvAltText"]
font = checkLocal(config[profile]["font"])
fontSize = int((config[profile]["fontSize"]))
xSize = config[profile]["xSize"]
@ -191,9 +213,9 @@ def readConfig(profile=False,platform=False):
except KeyError:
text = False
return {"saveLocation":saveLocation,"imagesLocation":imagesLocation,"csvLocation":csvLocation,"fontSize":fontSize,"font":font,"token":token,"filename":filename,"xSize":xSize,"ySize":ySize,"panelLength":panelLength,"csvTree":csvTree,"csvSpeech":csvSpeech,"csvSubs":csvSubs,"csvObj":csvObj,"text":text}
return {"saveLocation":saveLocation,"imagesLocation":imagesLocation,"csvLocation":csvLocation,"fontSize":fontSize,"font":font,"token":token,"filename":filename,"xSize":xSize,"ySize":ySize,"panelLength":panelLength,"csvTree":csvTree,"csvSpeech":csvSpeech,"csvSubs":csvSubs,"csvObj":csvObj,"csvAltText":csvAltText,"text":text}
filename = config[profile]["filename"]
return {"saveLocation":saveLocation,"imagesLocation":imagesLocation,"csvLocation":csvLocation,"fontSize":fontSize,"font":font,"filename":filename,"xSize":xSize,"ySize":ySize,"panelLength":panelLength,"csvTree":csvTree,"csvSpeech":csvSpeech,"csvSubs":csvSubs,"csvObj":csvObj}
return {"saveLocation":saveLocation,"imagesLocation":imagesLocation,"csvLocation":csvLocation,"fontSize":fontSize,"font":font,"filename":filename,"xSize":xSize,"ySize":ySize,"panelLength":panelLength,"csvTree":csvTree,"csvSpeech":csvSpeech,"csvSubs":csvSubs,"csvObj":csvObj,"csvAltText":csvAltText}
def checkLocal(directory):
"""Checks if it's a relative or absolute path"""
@ -235,7 +257,7 @@ if __name__ == "__main__":
story = [] #Story specified
for x in args.story:
story.append(x)
finalStrip = writeStrip(story,config)
finalStrip,alt_text = writeStrip(story,config)
if args.a4: #Prints a PDF
finalStrip = finalStrip.resize((2249,516))
@ -248,11 +270,12 @@ if __name__ == "__main__":
if args.multiple[0] == 1: #No multiple selected
if args.output == False:
finalStrip.show()
print(alt_text)
else:
finalStrip.save(fileName)
else: #Multiple selected
if args.output == False:
print(story)
print(story,alt_text)
else:
finalStrip.save(fileName + str(ist).zfill(3) + ".png")