Allow for multi-page printing.
This commit is contained in:
@@ -314,27 +314,41 @@ def make_set (card_set, target_directory, default_frame, frames={}):
|
|||||||
def make_sheets (set_filename, scale_factor=(1, 1), card_size=None):
|
def make_sheets (set_filename, scale_factor=(1, 1), card_size=None):
|
||||||
if os.path.isfile(set_filename):
|
if os.path.isfile(set_filename):
|
||||||
set_filename = os.path.splitext(set_filename)[0]
|
set_filename = os.path.splitext(set_filename)[0]
|
||||||
|
|
||||||
sheet_size = (2550, 3300)
|
page_size = (2550, 3300)
|
||||||
margins = (50, 50)
|
margins = (50, 50)
|
||||||
sheet = Image.new("RGBA", sheet_size)
|
(x, y) = margins
|
||||||
(x, y) = margins
|
|
||||||
|
# collect card images to determine print sheet size
|
||||||
|
cards = []
|
||||||
|
pages = [cards]
|
||||||
for image_file in os.listdir(set_filename):
|
for image_file in os.listdir(set_filename):
|
||||||
if not os.path.splitext(image_file)[1] in [".jpg", ".png"]:
|
if not os.path.splitext(image_file)[1] in [".jpg", ".png"]:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
image = Image.open(os.path.join(set_filename, image_file))
|
image = Image.open(os.path.join(set_filename, image_file))
|
||||||
size = (card_size[0], card_size[1]) if card_size else (image.width, image.height)
|
size = (card_size[0], card_size[1]) if card_size else (image.width, image.height)
|
||||||
image = image.resize((int(size[0] * scale_factor[0]), int(size[1] * scale_factor[1])))
|
image = image.resize((int(size[0] * scale_factor[0]), int(size[1] * scale_factor[1])))
|
||||||
|
cards.append((image, (x, y)))
|
||||||
sheet.paste(image, (x, y))
|
|
||||||
x = x + margins[0] + image.width
|
x = x + margins[0] + image.width
|
||||||
|
|
||||||
if x + image.width > sheet_size[0]:
|
if x + image.width > page_size[0]:
|
||||||
x = margins[0]
|
x = margins[0]
|
||||||
y = y + margins[1] + image.height
|
y = y + margins[1] + image.height
|
||||||
|
|
||||||
|
if y + image.width > page_size[1]:
|
||||||
|
x = margins[0]
|
||||||
|
y = margins[1]
|
||||||
|
cards = []
|
||||||
|
pages.append(cards)
|
||||||
|
|
||||||
|
sheet_size = (page_size[0], page_size[1] * len(pages))
|
||||||
|
sheet = Image.new("RGBA", sheet_size)
|
||||||
|
for i in range(0, len(pages)):
|
||||||
|
for card in pages[i]:
|
||||||
|
sheet.paste(card[0], (card[1][0], card[1][1] + (page_size[1] * i)))
|
||||||
|
|
||||||
sheet.save(f"{set_filename}.png")
|
sheet.save(f"{set_filename}.png")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -354,6 +368,8 @@ def main():
|
|||||||
frames = namespace.get("frames", {})
|
frames = namespace.get("frames", {})
|
||||||
default_frame = namespace['default_frame']
|
default_frame = namespace['default_frame']
|
||||||
sets = namespace['sets']
|
sets = namespace['sets']
|
||||||
|
scale_factor = namespace.get("scale_factor", (1.1446, 1.1446))
|
||||||
|
|
||||||
for name, setdata in sets.items():
|
for name, setdata in sets.items():
|
||||||
make_set(setdata, name, default_frame, frames)
|
make_set(setdata, name, default_frame, frames)
|
||||||
|
make_sheets(name, scale_factor=scale_factor)
|
||||||
|
|||||||
Reference in New Issue
Block a user