From eb0abb538c19584020604939368f2f0bf15f0d5e Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Fri, 13 Jun 2025 12:22:07 -0700 Subject: [PATCH] add tome text for splits (#963) --- kindlecomicconverter/comic2ebook.py | 6 +++--- kindlecomicconverter/image.py | 25 ++++++++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 987c5a5..de7ff46 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -423,7 +423,7 @@ def buildOPF(dstdir, title, filelist, cover=None): ""]) f.close() -def buildEPUB(path, chapternames, tomenumber, ischunked, cover: image.Cover): +def buildEPUB(path, chapternames, tomenumber, ischunked, cover: image.Cover, len_tomes=0): filelist = [] chapterlist = [] os.mkdir(os.path.join(path, 'OEBPS', 'Text')) @@ -503,7 +503,7 @@ def buildEPUB(path, chapternames, tomenumber, ischunked, cover: image.Cover): "}\n"]) f.close() build_html_start = perf_counter() - cover.save_to_epub(os.path.join(path, 'OEBPS', 'Images', 'cover.jpg'), tomenumber) + cover.save_to_epub(os.path.join(path, 'OEBPS', 'Images', 'cover.jpg'), tomenumber, len_tomes) options.covers.append((cover, options.uuid)) for dirpath, dirnames, filenames in os.walk(os.path.join(path, 'OEBPS', 'Images')): chapter = False @@ -1284,7 +1284,7 @@ def makeBook(source, qtgui=None): else: print("Creating EPUB file...") if len(tomes) > 1: - buildEPUB(tome, chapterNames, tomeNumber, True, cover) + buildEPUB(tome, chapterNames, tomeNumber, True, cover, len(tomes)) filepath.append(getOutputFilename(source, options.output, '.epub', ' ' + str(tomeNumber))) else: buildEPUB(tome, chapterNames, tomeNumber, False, cover) diff --git a/kindlecomicconverter/image.py b/kindlecomicconverter/image.py index e3763e7..8082a55 100755 --- a/kindlecomicconverter/image.py +++ b/kindlecomicconverter/image.py @@ -22,7 +22,7 @@ import io import os from pathlib import Path import mozjpeg_lossless_optimization -from PIL import Image, ImageOps, ImageStat, ImageChops, ImageFilter +from PIL import Image, ImageOps, ImageStat, ImageChops, ImageFilter, ImageDraw from .page_number_crop_alg import get_bbox_crop_margin_page_number, get_bbox_crop_margin from .inter_panel_crop_alg import crop_empty_inter_panel @@ -449,13 +449,24 @@ class Cover: else: self.image = self.image.crop((w/2 + w * 0.03, 0, w, h)) - def save_to_epub(self, target, tomeid): - if tomeid == 0: - self.tomeid = 1 - else: - self.tomeid = tomeid + def save_to_epub(self, target, tomeid, len_tomes=0): try: - self.image.save(target, "JPEG", optimize=1, quality=85) + if tomeid == 0: + self.image.save(target, "JPEG", optimize=1, quality=85) + else: + copy = self.image.copy() + draw = ImageDraw.Draw(copy) + w, h = copy.size + draw.text( + xy=(w/2, h * .85), + text=f'{tomeid}/{len_tomes}', + anchor='ms', + font_size=h//7, + fill=255, + stroke_fill=0, + stroke_width=25 + ) + copy.save(target, "JPEG", optimize=1, quality=85) except IOError: raise RuntimeError('Failed to save cover.')