diff options
| author | Paweł Jastrzębski <[email protected]> | 2016-11-21 13:55:12 +0100 |
|---|---|---|
| committer | Paweł Jastrzębski <[email protected]> | 2016-11-21 13:55:12 +0100 |
| commit | 2a2bfae112a069cdf815dd65badb7ee79ea2307d (patch) | |
| tree | 46b8b513e6c550be3cec2f2f9309d89fa7372003 | |
| parent | Improved cropping mechanism (diff) | |
| download | kcc-2a2bfae112a069cdf815dd65badb7ee79ea2307d.tar.gz kcc-2a2bfae112a069cdf815dd65badb7ee79ea2307d.tar.bz2 kcc-2a2bfae112a069cdf815dd65badb7ee79ea2307d.zip | |
Dropped HQ PV option
| -rwxr-xr-x | kcc/comic2ebook.py | 44 | ||||
| -rwxr-xr-x | kcc/image.py | 109 |
2 files changed, 56 insertions, 97 deletions
diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py index 34c8b0a..0633896 100755 --- a/kcc/comic2ebook.py +++ b/kcc/comic2ebook.py @@ -95,8 +95,6 @@ def buildHTML(path, imgfile, imgfilepath): additionalStyle = 'background-color:#FFFFFF;' htmlpath = '' postfix = '' - size = '' - imgfilepv = '' backref = 1 head = path while True: @@ -122,16 +120,8 @@ def buildHTML(path, imgfile, imgfilepath): "<body style=\"background-image: ", "url('", "../" * backref, "Images/", postfix, imgfile, "'); " + additionalStyle + "\">\n"]) if options.iskindle and options.panelview: - if options.hqmode: - imgfilepv = list(os.path.splitext(imgfile)) - imgfilepv[0] += "-hq" - imgfilepv = "".join(imgfilepv) - if os.path.isfile(os.path.join(head, "Images", postfix, imgfilepv)): - size = Image.open(os.path.join(head, "Images", postfix, imgfilepv)).size - if not options.hqmode or not size: - imgfilepv = imgfile - sizeTmp = Image.open(os.path.join(head, "Images", postfix, imgfilepv)).size - size = (int(sizeTmp[0] * 1.5), int(sizeTmp[1] * 1.5)) + sizeTmp = Image.open(os.path.join(head, "Images", postfix, imgfile)).size + size = (int(sizeTmp[0] * 1.5), int(sizeTmp[1] * 1.5)) if size[0] <= deviceres[0]: noHorizontalPV = True else: @@ -193,7 +183,7 @@ def buildHTML(path, imgfile, imgfilepath): for box in boxes: f.writelines(["<div class=\"PV-P\" id=\"" + box + "-P\" style=\"" + additionalStyle + "\">\n", "<img style=\"" + boxStyles[box] + "\" src=\"", "../" * backref, "Images/", postfix, - imgfilepv, "\" width=\"" + str(size[0]) + "\" height=\"" + str(size[1]) + "\"/>\n", + imgfile, "\" width=\"" + str(size[0]) + "\" height=\"" + str(size[1]) + "\"/>\n", "</div>\n"]) f.writelines(["</body>\n", "</html>\n"]) @@ -437,17 +427,15 @@ def buildEPUB(path, chapterNames, tomeNumber): chapter = False dirnames, filenames = walkSort(dirnames, filenames) for afile in filenames: - filename = getImageFileName(afile) - if not filename[0].endswith('-hq'): - filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) - if not chapter: - chapterlist.append((dirpath.replace('Images', 'Text'), filelist[-1][1])) - chapter = True - if cover is None: - cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), - 'cover' + getImageFileName(filelist[-1][1])[1]) - options.covers.append((image.Cover(os.path.join(filelist[-1][0], filelist[-1][1]), cover, options, - tomeNumber), options.uuid)) + filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) + if not chapter: + chapterlist.append((dirpath.replace('Images', 'Text'), filelist[-1][1])) + chapter = True + if cover is None: + cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), + 'cover' + getImageFileName(filelist[-1][1])[1]) + options.covers.append((image.Cover(os.path.join(filelist[-1][0], filelist[-1][1]), cover, options, + tomeNumber), options.uuid)) # Overwrite chapternames if tree is flat and ComicInfo.xml has bookmarks if not chapterNames and options.chapters: chapterlist = [] @@ -964,8 +952,6 @@ def makeParser(): help="Set cropping mode. 0: Disabled 1: Margins 2: Margins + page numbers [Default=2]") processingOptions.add_option("--cp", "--croppingpower", type="float", dest="croppingp", default="1.0", help="Set cropping power [Default=1.0]") - processingOptions.add_option("--hq", action="store_true", dest="hqmode", default=False, - help="Enable high quality Panel View") processingOptions.add_option("--blackborders", action="store_true", dest="black_borders", default=False, help="Disable autodetection and force black borders") processingOptions.add_option("--whiteborders", action="store_true", dest="white_borders", default=False, @@ -1015,20 +1001,16 @@ def checkOptions(): # Older Kindle don't need higher resolution files due lack of Panel View. if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'K3' or options.profile == 'KDX': options.panelview = False - options.hqmode = False # Webtoon mode mandatory options if options.webtoon: options.panelview = False - options.hqmode = False options.righttoleft = False options.upscale = True # Disable all Kindle features for other e-readers if options.profile == 'OTHER': options.panelview = False - options.hqmode = False if 'Ko' in options.profile: options.panelview = False - options.hqmode = False # CBZ files on Kindle DX/DXG support higher resolution if options.profile == 'KDX' and options.format == 'CBZ': options.customheight = 1200 @@ -1041,7 +1023,7 @@ def checkOptions(): if options.customheight != 0: Y = options.customheight newProfile = ("Custom", (int(X), int(Y)), image.ProfileData.Palette16, - image.ProfileData.Profiles[options.profile][3], (int(int(X) * 1.5), int(int(Y) * 1.5))) + image.ProfileData.Profiles[options.profile][3]) image.ProfileData.Profiles["Custom"] = newProfile options.profile = "Custom" options.profileData = image.ProfileData.Profiles[options.profile] diff --git a/kcc/image.py b/kcc/image.py index 3101b99..009b2bb 100755 --- a/kcc/image.py +++ b/kcc/image.py @@ -78,21 +78,21 @@ class ProfileData: ] Profiles = { - 'K1': ("Kindle 1", (600, 670), Palette4, 1.8, (900, 1005)), - 'K2': ("Kindle 2", (600, 670), Palette15, 1.8, (900, 1005)), - 'K3': ("Kindle", (600, 800), Palette16, 1.8, (900, 1200)), - 'K45': ("Kindle", (600, 800), Palette16, 1.8, (900, 1200)), - 'KDX': ("Kindle DX/DXG", (824, 1000), Palette16, 1.8, (1236, 1500)), - 'KPW': ("Kindle Paperwhite 1/2", (758, 1024), Palette16, 1.8, (1137, 1536)), - 'KV': ("Kindle Paperwhite 3/Voyage/Oasis", (1072, 1448), Palette16, 1.8, (1608, 2172)), - 'KoMT': ("Kobo Mini/Touch", (600, 800), Palette16, 1.8, (900, 1200)), - 'KoG': ("Kobo Glo", (768, 1024), Palette16, 1.8, (1152, 1536)), - 'KoGHD': ("Kobo Glo HD", (1072, 1448), Palette16, 1.8, (1608, 2172)), - 'KoA': ("Kobo Aura", (758, 1024), Palette16, 1.8, (1137, 1536)), - 'KoAHD': ("Kobo Aura HD", (1080, 1440), Palette16, 1.8, (1620, 2160)), - 'KoAH2O': ("Kobo Aura H2O", (1080, 1430), Palette16, 1.8, (1620, 2145)), - 'KoAO': ("Kobo Aura ONE", (1404, 1872), Palette16, 1.8, (2106, 2808)), - 'OTHER': ("Other", (0, 0), Palette16, 1.8, (0, 0)), + 'K1': ("Kindle 1", (600, 670), Palette4, 1.8), + 'K2': ("Kindle 2", (600, 670), Palette15, 1.8), + 'K3': ("Kindle", (600, 800), Palette16, 1.8), + 'K45': ("Kindle", (600, 800), Palette16, 1.8), + 'KDX': ("Kindle DX/DXG", (824, 1000), Palette16, 1.8), + 'KPW': ("Kindle Paperwhite 1/2", (758, 1024), Palette16, 1.8), + 'KV': ("Kindle Paperwhite 3/Voyage/Oasis", (1072, 1448), Palette16, 1.8), + 'KoMT': ("Kobo Mini/Touch", (600, 800), Palette16, 1.8), + 'KoG': ("Kobo Glo", (768, 1024), Palette16, 1.8), + 'KoGHD': ("Kobo Glo HD", (1072, 1448), Palette16, 1.8), + 'KoA': ("Kobo Aura", (758, 1024), Palette16, 1.8), + 'KoAHD': ("Kobo Aura HD", (1080, 1440), Palette16, 1.8), + 'KoAH2O': ("Kobo Aura H2O", (1080, 1430), Palette16, 1.8), + 'KoAO': ("Kobo Aura ONE", (1404, 1872), Palette16, 1.8), + 'OTHER': ("Other", (0, 0), Palette16, 1.8), } @@ -106,8 +106,6 @@ class ComicPageParser: self.color = self.colorCheck() self.fill = self.fillCheck() self.splitCheck() - if self.opt.hqmode: - self.sizeCheck() def getImageHistogram(self, image): histogram = image.histogram() @@ -206,29 +204,16 @@ class ComicPageParser: else: return 'white' - def sizeCheck(self): - additionalPayload = [] - width, height = self.image.size - dstwidth, dstheight = self.size - for work in self.payload: - if width > dstwidth and height > dstheight: - additionalPayload.append([work[0] + '+', work[1], work[2].copy(), work[3], work[4]]) - self.payload = self.payload + additionalPayload - class ComicPage: def __init__(self, mode, path, image, color, fill, options): self.opt = options - _, self.size, self.palette, self.gamma, self.panelviewsize = self.opt.profileData + _, self.size, self.palette, self.gamma = self.opt.profileData self.image = image self.color = color self.fill = fill self.rotated = False self.orgPath = os.path.join(path[0], path[1]) - if '+' in mode: - self.hqMode = True - else: - self.hqMode = False if 'N' in mode: self.targetPath = os.path.join(path[0], os.path.splitext(path[1])[0]) + '-KCC' elif 'R' in mode: @@ -248,8 +233,6 @@ class ComicPage: flags.append('Rotated') if self.fill != 'white': flags.append('BlackFill') - if self.hqMode: - self.targetPath += '-HQ' if self.opt.forcepng: self.targetPath += '.png' self.image.save(self.targetPath, 'PNG', optimize=1) @@ -283,41 +266,35 @@ class ComicPage: self.image = self.image.quantize(palette=palImg) def resizeImage(self): - if self.hqMode: - size = (self.panelviewsize[0], self.panelviewsize[1]) - if self.image.size[0] > size[0] or self.image.size[1] > size[1]: - self.image.thumbnail(size, Image.LANCZOS) + if self.image.size[0] <= self.size[0] and self.image.size[1] <= self.size[1]: + method = Image.BICUBIC else: - size = (self.size[0], self.size[1]) - if self.image.size[0] <= size[0] and self.image.size[1] <= size[1]: - method = Image.BICUBIC - else: - method = Image.LANCZOS - if self.opt.stretch: - self.image = self.image.resize(size, method) - elif self.image.size[0] <= size[0] and self.image.size[1] <= size[1] and not self.opt.upscale: - if self.opt.format == 'CBZ': - borderw = int((size[0] - self.image.size[0]) / 2) - borderh = int((size[1] - self.image.size[1]) / 2) - self.image = ImageOps.expand(self.image, border=(borderw, borderh), fill=self.fill) - if self.image.size[0] != size[0] or self.image.size[1] != size[1]: - self.image = ImageOps.fit(self.image, size, method=Image.BICUBIC, centering=(0.5, 0.5)) + method = Image.LANCZOS + if self.opt.stretch: + self.image = self.image.resize(self.size, method) + elif self.image.size[0] <= self.size[0] and self.image.size[1] <= self.size[1] and not self.opt.upscale: + if self.opt.format == 'CBZ': + borderw = int((self.size[0] - self.image.size[0]) / 2) + borderh = int((self.size[1] - self.image.size[1]) / 2) + self.image = ImageOps.expand(self.image, border=(borderw, borderh), fill=self.fill) + if self.image.size[0] != self.size[0] or self.image.size[1] != self.size[1]: + self.image = ImageOps.fit(self.image, self.size, method=Image.BICUBIC, centering=(0.5, 0.5)) + else: + if self.opt.format == 'CBZ': + 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] + self.image = ImageOps.expand(self.image, border=(int(diff / 2), 0), fill=self.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, int(diff / 2)), fill=self.fill) + self.image = ImageOps.fit(self.image, self.size, method=method, centering=(0.5, 0.5)) else: - if self.opt.format == 'CBZ': - ratioDev = float(size[0]) / float(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] - self.image = ImageOps.expand(self.image, border=(int(diff / 2), 0), fill=self.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, int(diff / 2)), fill=self.fill) - self.image = ImageOps.fit(self.image, size, method=method, centering=(0.5, 0.5)) - else: - hpercent = size[1] / float(self.image.size[1]) - wsize = int((float(self.image.size[0]) * float(hpercent))) - self.image = self.image.resize((wsize, size[1]), method) - if self.image.size[0] > size[0] or self.image.size[1] > size[1]: - self.image.thumbnail(size, Image.LANCZOS) + hpercent = self.size[1] / float(self.image.size[1]) + wsize = int((float(self.image.size[0]) * float(hpercent))) + self.image = self.image.resize((wsize, self.size[1]), method) + if self.image.size[0] > self.size[0] or self.image.size[1] > self.size[1]: + self.image.thumbnail(self.size, Image.LANCZOS) def getBoundingBox(self, tmpImg): min_margin = [int(0.005 * i + 0.5) for i in tmpImg.size] |