Browse Source

added alt text feature

oloturia 1 year ago
parent
commit
e09d901ecb
5 changed files with 200 additions and 22 deletions
  1. 1 0
      README.md
  2. 3 0
      config.json
  3. 2 2
      mastodon_main.py
  4. 151 0
      oloturia/alttext.csv
  5. 43 20
      randstrip.py

+ 1 - 0
README.md

@@ -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)

+ 3 - 0
config.json

@@ -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,

+ 2 - 2
mastodon_main.py

@@ -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 - 0
oloturia/alttext.csv

@@ -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

+ 43 - 20
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")