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:
parent
5c9473fcc9
commit
e09d901ecb
5 changed files with 200 additions and 22 deletions
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
151
oloturia/alttext.csv
Normal 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.
|
63
randstrip.py
63
randstrip.py
|
@ -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")
|
||||
|
||||
|
|
Loading…
Reference in a new issue