Added support for DPI instead of fixed image dimensions

fixes #11
This commit is contained in:
Marco van Dijk 2021-07-09 16:35:17 +02:00
parent bf0352a600
commit 682278fcd5
2 changed files with 13 additions and 8 deletions

View File

@ -17,6 +17,7 @@
import os import os
import configparser import configparser
"""!@brief Load, creates and keeps the config up to date """!@brief Load, creates and keeps the config up to date
""" """
def initConfig(): def initConfig():
@ -33,11 +34,11 @@ def initConfig():
'maxDepth': 3 'maxDepth': 3
} }
config['output'] = {'metafontfamily': 'fonts/CourierPrime-Regular.ttf', config['output'] = {'metafontfamily': 'fonts/CourierPrime-Regular.ttf',
'metaFontWeight': 8, 'metaFontWeight': 16,
'lyricfontfamily': 'fonts/CourierPrime-Regular.ttf', 'lyricfontfamily': 'fonts/CourierPrime-Regular.ttf',
'tablaturefontfamliy': 'fonts/CourierPrime-Bold.ttf', 'tablaturefontfamliy': 'fonts/CourierPrime-Bold.ttf',
'songFontWeight': 16, 'songFontWeight': 32,
'imageWidth': 595, 'imageHeight': 842, # A4 at 72dpi 'imageppi': 144,
'backgroundColour': '255,255,255', 'backgroundColour': '255,255,255',
'fontColour': '0,0,0', 'fontColour': '0,0,0',
'metadataColour': '128,128,128', 'metadataColour': '128,128,128',

View File

@ -17,6 +17,9 @@ import re
import lib.config import lib.config
from PIL import ImageFont from PIL import ImageFont
A4 = {'width': 210, 'height': 297}
A5 = {'width': 210, 'height': 148}
"""!@brief Removes empty lines and makes sure every line ends with \r\n """!@brief Removes empty lines and makes sure every line ends with \r\n
@param inputString raw txt input @param inputString raw txt input
@return string of parsed input @return string of parsed input
@ -200,8 +203,10 @@ class Song:
self.fontColour = tuple(int(var) for var in configObj['fontColour'].split(',')) self.fontColour = tuple(int(var) for var in configObj['fontColour'].split(','))
self.backgroundColour = tuple(int(var) for var in configObj['backgroundColour'].split(',')) self.backgroundColour = tuple(int(var) for var in configObj['backgroundColour'].split(','))
self.metadataColour = tuple(int(var) for var in configObj['metadataColour'].split(',')) self.metadataColour = tuple(int(var) for var in configObj['metadataColour'].split(','))
self.imageWidth = int(configObj['imageWidth']) self.ppi = int(configObj['imageppi'])
self.imageHeight = int(configObj['imageHeight']) # 0.03937 pixels per minimeter per ppi
self.imageWidth = int(self.ppi * A4['width'] * 0.03937)
self.imageHeight = int(self.ppi * A4['height'] * 0.03937)
self.leftMargin = int(configObj['leftMargin']) self.leftMargin = int(configObj['leftMargin'])
self.rightMargin = int(configObj['rightMargin']) self.rightMargin = int(configObj['rightMargin'])
self.fontMetadata = ImageFont.truetype(configObj['metafontfamily'], int(configObj['metaFontWeight'])) self.fontMetadata = ImageFont.truetype(configObj['metafontfamily'], int(configObj['metaFontWeight']))
@ -272,7 +277,7 @@ class Song:
"""!@brief Tries to fill in the whitespace on the current render """!@brief Tries to fill in the whitespace on the current render
It will compare the size of existing whitespace with the size of the first section on the next page It will compare the size of existing whitespace with the size of the first section on the next page
While the amount we are short is within 10% of the current image height, resize down While the amount we are short is within X% of the current image height, resize down
@return True if we should resize down, False if we are fine @return True if we should resize down, False if we are fine
""" """
def canFillWhitespace(self): def canFillWhitespace(self):
@ -288,10 +293,9 @@ class Song:
whitespace = self.imageHeight - curPage.totalHeight whitespace = self.imageHeight - curPage.totalHeight
amountWeAreShort = nextFirstSection.expectedHeight - whitespace amountWeAreShort = nextFirstSection.expectedHeight - whitespace
shortInPercentages = amountWeAreShort / self.imageHeight shortInPercentages = amountWeAreShort / self.imageHeight
# Take a 10% range
#print("Whitespace {} vs next section height {}".format(whitespace, nextFirstSection.expectedHeight)) #print("Whitespace {} vs next section height {}".format(whitespace, nextFirstSection.expectedHeight))
#print("We are {} short to fit the next image (total image height {} => {}% of total height)".format(amountWeAreShort, self.imageHeight, shortInPercentages*100)) #print("We are {} short to fit the next image (total image height {} => {}% of total height)".format(amountWeAreShort, self.imageHeight, shortInPercentages*100))
if shortInPercentages < 0.10: if shortInPercentages < 0.15:
return True return True
currentPageIt += 1 currentPageIt += 1
return False return False