From 6bc80380686c23df9678e5ee630f59c008f7b82c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?= Date: Sun, 17 Mar 2013 12:52:33 +0100 Subject: [PATCH] Yet another refactoring of resizeImage I hope all bugs are dead this time! --- kcc/comic2ebook.py | 13 +++++++++---- kcc/image.py | 43 ++++++++++++++++++++++++------------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py index 18e455e..311a6a3 100755 --- a/kcc/comic2ebook.py +++ b/kcc/comic2ebook.py @@ -222,6 +222,7 @@ def buildOPF(profile, dstdir, title, filelist, cover=None): f.write("\n") splitCountUsed += 1 + f.write("\n") f.write("\n\n") splitCountUsed = 1 for entry in reflist: @@ -289,11 +290,11 @@ def isInFilelist(filename, filelist): return seen -def applyImgOptimization(img, isSplit=False): +def applyImgOptimization(img, isSplit=False, toRight=False): img.cropWhiteSpace(10.0) if options.cutpagenumbers: img.cutPageNumber() - img.resizeImage(options.upscale, options.stretch, options.black_borders, isSplit, options.landscapemode, + img.resizeImage(options.upscale, options.stretch, options.black_borders, isSplit, toRight, options.landscapemode, options.nopanelviewhq) img.optimizeImage(options.gamma) if not options.notquantize: @@ -323,18 +324,22 @@ def dirImgProcess(path): if options.verbose: print "Splitted " + afile if options.righttoleft: + toRight1 = False + toRight2 = True if facing == "left": splitCount += 1 facing = "right" else: + toRight1 = True + toRight2 = False if facing == "right": splitCount += 1 facing = "left" img0 = image.ComicPage(split[0], options.profile) - applyImgOptimization(img0, True) + applyImgOptimization(img0, True, toRight1) img0.saveToDir(dirpath, options.notquantize) img1 = image.ComicPage(split[1], options.profile) - applyImgOptimization(img1, True) + applyImgOptimization(img1, True, toRight2) img1.saveToDir(dirpath, options.notquantize) else: if facing == "right": diff --git a/kcc/image.py b/kcc/image.py index c8fc450..743c124 100755 --- a/kcc/image.py +++ b/kcc/image.py @@ -143,39 +143,44 @@ class ComicPage: palImg.putpalette(self.palette) self.image = self.image.quantize(palette=palImg) - def resizeImage(self, upscale=False, stretch=False, black_borders=False, isSplit=False, landscapeMode=False, - noPanelViewHQ=False): + def resizeImage(self, upscale=False, stretch=False, black_borders=False, isSplit=False, toRight=False, + landscapeMode=False, noPanelViewHQ=False): method = Image.ANTIALIAS if black_borders: fill = 'black' else: fill = 'white' - if not noPanelViewHQ: - size = (self.panelviewsize[0], self.panelviewsize[1]) - else: + if noPanelViewHQ: size = (self.size[0], self.size[1]) + else: + size = (self.panelviewsize[0], self.panelviewsize[1]) + if isSplit and landscapeMode: + upscale = True if self.image.size[0] <= self.size[0] and self.image.size[1] <= self.size[1]: if not upscale: - if isSplit and landscapeMode: - borderh = (self.size[1] - self.image.size[1]) / 2 - self.image = ImageOps.expand(self.image, border=(0, borderh), fill=fill) - method = Image.BILINEAR - else: - 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) - return self.image + 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) + return self.image else: method = Image.BILINEAR - if stretch: - self.image = self.image.resize(self.size, method) + if stretch: # if stretching call directly resize() without other considerations. + self.image = self.image.resize(size, method) return self.image ratioDev = float(self.size[0]) / float(self.size[1]) if (float(self.image.size[0]) / float(self.image.size[1])) < ratioDev: - diff = int(self.image.size[1] * ratioDev) - self.image.size[0] if isSplit and landscapeMode: - diff = 2 - self.image = ImageOps.expand(self.image, border=(diff / 2, 0), fill=fill) + 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) + if toRight: + tempImg.paste(self.image, (diff, 0)) + else: + tempImg.paste(self.image, (0, 0)) + self.image = tempImg + else: + diff = int(self.image.size[1] * ratioDev) - self.image.size[0] + self.image = ImageOps.expand(self.image, border=(diff / 2, 0), fill=fill) elif (float(self.image.size[0]) / float(self.image.size[1])) > ratioDev: diff = int(self.image.size[0] / ratioDev) - self.image.size[1] self.image = ImageOps.expand(self.image, border=(0, diff / 2), fill=fill)