From 6e3888f295c4aa64ebae52679376b3bffe93f8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?= Date: Sun, 15 Sep 2013 13:03:30 +0200 Subject: [PATCH] Real Panel View - Ignore margins (close #60) --- kcc/comic2ebook.py | 98 +++++++++++++++++++++++----------------------- kcc/image.py | 31 +++++++++++++++ 2 files changed, 80 insertions(+), 49 deletions(-) diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py index 246b565..48ff053 100755 --- a/kcc/comic2ebook.py +++ b/kcc/comic2ebook.py @@ -81,65 +81,65 @@ def buildHTML(path, imgfile): if options.panelview: if rotate: if options.righttoleft: - f.writelines(["
\n", - "
\n", - "
\n", - "
\n" - ]) + order = [1, 3, 2, 4] else: - f.writelines(["
\n", - "
\n", - "
\n", - "
\n" - ]) + order = [2, 4, 1, 3] else: if options.righttoleft: - f.writelines(["
\n", - "
\n", - "
\n", - "
\n" - ]) + order = [2, 1, 4, 3] else: - f.writelines(["
\n", - "
\n", - "
\n", - "
\n" - ]) + order = [1, 2, 3, 4] + f.writelines(["
\n", + "
\n", + "
\n", + "
\n" + ]) if options.quality == 2: imgfilepv = string.split(imgfile, ".") + imgfilepv[0] = imgfilepv[0].split("_kccx")[0] imgfilepv[0] += "_kcchq" imgfilepv = string.join(imgfilepv, ".") else: imgfilepv = imgfile - f.writelines(["
\"",
\n", - "
\"",
\n", - "
\"",
\n", - "
\"",
\n" - ]) + if not "_kccx" in filename[0]: + for box in ["BoxTL", "BoxTR", "BoxBL", "BoxBR"]: + f.writelines(["
\""
\n" + ]) + else: + xy = string.split(filename[0], "_kccx")[1] + x = string.split(xy, "_kccy")[0].lstrip("0") + y = string.split(xy, "_kccy")[1].lstrip("0") + if x != "": + x = "-" + str(float(x)/100) + "%" + else: + x = "0%" + if y != "": + y = "-" + str(float(y)/100) + "%" + else: + y = "0%" + f.writelines(["
\""
\n", + "
\""
\n", + "
\""
\n", + "
\""
\n", + ]) f.writelines(["\n\n"]) f.close() return path, imgfile diff --git a/kcc/image.py b/kcc/image.py index b028dd6..d05b8c6 100755 --- a/kcc/image.py +++ b/kcc/image.py @@ -146,6 +146,8 @@ class ComicPage: os.remove(os.path.join(targetdir, self.filename)) else: suffix += "_kcchq" + if self.border: + suffix += "_kccx" + str(self.border[0]) + "_kccy" + str(self.border[1]) if forcepng: self.image.save(os.path.join(targetdir, os.path.splitext(self.filename)[0] + suffix + ".png"), "PNG") else: @@ -185,8 +187,13 @@ class ComicPage: fill = 'white' if qualityMode == 0: size = (self.size[0], self.size[1]) + generateBorder = True + elif qualityMode == 1: + size = (self.panelviewsize[0], self.panelviewsize[1]) + generateBorder = True else: size = (self.panelviewsize[0], self.panelviewsize[1]) + generateBorder = False # Kindle Paperwhite/Touch - Force upscale of splited pages to increase readability if isSplit and landscapeMode: upscale = True @@ -195,15 +202,30 @@ class ComicPage: borderw = (self.size[0] - self.image.size[0]) / 2 borderh = (self.size[1] - self.image.size[1]) / 2 self.image = ImageOps.expand(self.image, border=(borderw, borderh), fill=fill) + if generateBorder: + self.border = [int(round(float(borderw)/float(self.image.size[0])*100, 2)*100*1.5), + int(round(float(borderh)/float(self.image.size[1])*100, 2)*100*1.5)] + else: + self.border = None return self.image else: method = Image.BILINEAR if stretch: # if stretching call directly resize() without other considerations. self.image = self.image.resize(size, method) + if generateBorder: + if fill == 'white': + border = ImageOps.invert(self.image).getbbox() + else: + border = self.image.getbbox() + self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5), + int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)] + else: + self.border = None return self.image ratioDev = float(self.size[0]) / float(self.size[1]) if (float(self.image.size[0]) / float(self.image.size[1])) < ratioDev: if isSplit and landscapeMode: + generateBorder = False diff = int(self.image.size[1] * ratioDev) - self.image.size[0] self.image = ImageOps.expand(self.image, border=(diff / 2, 0), fill=fill) tempImg = Image.new(self.image.mode, (self.image.size[0] + diff, self.image.size[1]), fill) @@ -219,6 +241,15 @@ class ComicPage: diff = int(self.image.size[0] / ratioDev) - self.image.size[1] self.image = ImageOps.expand(self.image, border=(0, diff / 2), fill=fill) self.image = ImageOps.fit(self.image, size, method=method, centering=(0.5, 0.5)) + if generateBorder: + if fill == 'white': + border = ImageOps.invert(self.image).getbbox() + else: + border = self.image.getbbox() + self.border = [int(round(float(border[0])/float(self.image.size[0])*100, 2)*100*1.5), + int(round(float(border[1])/float(self.image.size[1])*100, 2)*100*1.5)] + else: + self.border = None return self.image def splitPage(self, targetdir, righttoleft=False, rotate=False):