From 8d5b2a9e88d6d2ee5a5a5e84b273752b614ad740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?= Date: Mon, 16 Sep 2013 17:17:13 +0200 Subject: [PATCH] General improvements --- kcc/comic2ebook.py | 9 +++++---- kcc/image.py | 46 ++++++++++++++-------------------------------- 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py index e79bf24..a895320 100755 --- a/kcc/comic2ebook.py +++ b/kcc/comic2ebook.py @@ -372,7 +372,7 @@ def fileImgProcess(work): split = None else: split = img.splitPage(dirpath, options.righttoleft, options.rotate) - if split is not None and split is not "R": + if split is not None: if options.verbose: print "Splitted " + afile output = pagenumber @@ -391,13 +391,14 @@ def fileImgProcess(work): img4.saveToDir(dirpath, options.forcepng, options.forcecolor, True) else: applyImgOptimization(img, options) - img.saveToDir(dirpath, options.forcepng, options.forcecolor, wipe, split) + img.saveToDir(dirpath, options.forcepng, options.forcecolor, wipe) if options.quality == 2: img2 = image.ComicPage(os.path.join(dirpath, afile), options.profileData) - if split == "R": + if img.rotated: img2.image = img2.image.rotate(90) + img2.rotated = True applyImgOptimization(img2, options, 0) - img2.saveToDir(dirpath, options.forcepng, options.forcecolor, True, split) + img2.saveToDir(dirpath, options.forcepng, options.forcecolor, True) return output diff --git a/kcc/image.py b/kcc/image.py index 60fca70..80e2e9a 100755 --- a/kcc/image.py +++ b/kcc/image.py @@ -146,15 +146,18 @@ class ComicPage: raise RuntimeError('Image file %s is corrupted' % source) self.image = Image.open(source) self.image = self.image.convert('RGB') + self.rotated = None + self.border = None + self.noHPV = None + self.noVPV = None - def saveToDir(self, targetdir, forcepng, color, wipe, suffix=None): + def saveToDir(self, targetdir, forcepng, color, wipe): try: + suffix = "" if not color: self.image = self.image.convert('L') # convert to grayscale - if suffix == "R": - suffix = "_kccrot" - else: - suffix = "" + if self.rotated: + suffix += "_kccrot" if wipe: os.remove(os.path.join(targetdir, self.filename)) else: @@ -213,18 +216,10 @@ class ComicPage: if generateBorder: if (self.image.size[0]-(2*borderw))*1.5 < self.size[0]: self.noHPV = True - else: - self.noHPV = None if (self.image.size[1]-(2*borderh))*1.5 < self.size[1]: self.noVPV = True - else: - self.noVPV = None 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 - self.noHPV = None - self.noVPV = None return self.image else: method = Image.BILINEAR @@ -238,22 +233,14 @@ class ComicPage: if border is not None: if (border[2]-border[0])*1.5 < self.size[0]: self.noHPV = True - else: - self.noHPV = None if (border[3]-border[1])*1.5 < self.size[1]: self.noVPV = True - else: - self.noVPV = None 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 = [0, 0] self.noHPV = True self.noVPV = True - else: - self.border = None - self.noHPV = None - self.noVPV = 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: @@ -271,22 +258,14 @@ class ComicPage: if border is not None: if (border[2]-border[0])*1.5 < self.size[0]: self.noHPV = True - else: - self.noHPV = None if (border[3]-border[1])*1.5 < self.size[1]: self.noVPV = True - else: - self.noVPV = None 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 = [0, 0] self.noHPV = True self.noVPV = True - else: - self.border = None - self.noHPV = None - self.noVPV = None return self.image def splitPage(self, targetdir, righttoleft=False, rotate=False): @@ -296,8 +275,10 @@ class ComicPage: if (width > height) != (dstwidth > dstheight): if rotate: self.image = self.image.rotate(90) - return "R" + self.rotated = True + return None else: + self.rotated = False if width > height: # Source is landscape, so split by the width leftbox = (0, 0, width / 2, height) @@ -323,6 +304,7 @@ class ComicPage: raise RuntimeError('Cannot write image in directory %s: %s' % (targetdir, e)) return fileone, filetwo else: + self.rotated = False return None def cutPageNumber(self): @@ -438,7 +420,7 @@ class ComicPage: def getImageFill(self, isWebToon): fill = 0 - if isWebToon: + if isWebToon or self.rotated: imageT = self.image.crop((0, 0, self.image.size[0], 1)) imageB = self.image.crop((0, self.image.size[1]-1, self.image.size[0], self.image.size[1])) fill += self.getImageHistogram(imageT) @@ -453,7 +435,7 @@ class ComicPage: elif fill == 0: return 'white' else: - if isWebToon: + if isWebToon or self.rotated: imageL = self.image.crop((0, 0, 1, self.image.size[1])) imageR = self.image.crop((self.image.size[0]-1, 0, self.image.size[0], self.image.size[1])) fill += self.getImageHistogram(imageL)