From 283d6101cdc43921b6190d831a1908245836f230 Mon Sep 17 00:00:00 2001 From: Paweł Jastrzębski Date: Wed, 22 Mar 2017 10:46:58 +0100 Subject: Reimplemented HQ Panel View (close #223) --- gui/KCC.ui | 62 ++++++++++++++++++++++++++++++++----- kindlecomicconverter/KCC_gui.py | 23 ++++++++++++-- kindlecomicconverter/KCC_ui.py | 7 +++-- kindlecomicconverter/comic2ebook.py | 19 ++++++++++-- kindlecomicconverter/image.py | 2 ++ 5 files changed, 97 insertions(+), 16 deletions(-) diff --git a/gui/KCC.ui b/gui/KCC.ui index 5dc8697..56cc2b6 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -66,7 +66,16 @@ false - + + 0 + + + 0 + + + 0 + + 0 @@ -127,7 +136,16 @@ - + + 0 + + + 0 + + + 0 + + 0 @@ -156,10 +174,13 @@ - <html><head/><body><p style=\'white-space:pre\'><span style=\" font-weight:600; text-decoration: underline;\">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style=\'white-space:pre\'><span style=\" font-weight:600; text-decoration: underline;\">Checked - 2 panels<br/></span>Zoom only the top and bottom of the page.</p></body></html> + <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Indeterminate - 2 panels<br/></span>Zoom only the top and bottom of the page.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 4 high quality panels<br/></span>Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.</p></body></html> - Panel View 4/2 + Panel View 4/2/HQ + + + true @@ -238,7 +259,16 @@ false - + + 0 + + + 0 + + + 0 + + 0 @@ -267,7 +297,16 @@ - + + 0 + + + 0 + + + 0 + + 0 @@ -316,7 +355,16 @@ - + + 0 + + + 0 + + + 0 + + 0 diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 5cf29d7..a8c7449 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -254,8 +254,10 @@ class WorkerThread(QtCore.QThread): options.splitter = 2 elif GUI.rotateBox.checkState() == 2: options.splitter = 1 - if GUI.qualityBox.isChecked(): + if GUI.qualityBox.checkState() == 1: options.autoscale = True + elif GUI.qualityBox.checkState() == 2: + options.hq = True if GUI.webtoonBox.isChecked(): options.webtoon = True if GUI.upscaleBox.checkState() == 1: @@ -613,6 +615,18 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.rotateBox.setEnabled(True) GUI.upscaleBox.setEnabled(True) + def togglequalityBox(self, value): + profile = GUI.profiles[str(GUI.deviceBox.currentText())] + if value == 2: + if profile['Label'] in ['KV']: + self.addMessage('This option is intended for older Kindle models.', 'warning') + self.addMessage('It might not provide any quality increase in this case.', 'warning') + GUI.upscaleBox.setEnabled(False) + GUI.upscaleBox.setChecked(True) + else: + GUI.upscaleBox.setEnabled(True) + GUI.upscaleBox.setChecked(profile['DefaultUpscale']) + def changeGamma(self, value): valueRaw = int(5 * round(float(value) / 5)) value = '%.2f' % (float(valueRaw) / 100) @@ -634,7 +648,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow): self.changeFormat() GUI.gammaSlider.setValue(0) self.changeGamma(0) - GUI.qualityBox.setEnabled(profile['PVOptions']) + if not GUI.webtoonBox.isChecked(): + GUI.qualityBox.setEnabled(profile['PVOptions']) GUI.upscaleBox.setChecked(profile['DefaultUpscale']) if not profile['PVOptions']: GUI.qualityBox.setChecked(False) @@ -648,7 +663,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.formatBox.setCurrentIndex(outputFormat) else: GUI.formatBox.setCurrentIndex(profile['DefaultFormat']) - GUI.qualityBox.setEnabled(profile['PVOptions']) + if not GUI.webtoonBox.isChecked(): + GUI.qualityBox.setEnabled(profile['PVOptions']) if str(GUI.formatBox.currentText()) == 'MOBI/AZW3': GUI.outputSplit.setEnabled(True) else: @@ -1002,6 +1018,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.gammaSlider.valueChanged.connect(self.changeGamma) GUI.gammaBox.stateChanged.connect(self.togglegammaBox) GUI.webtoonBox.stateChanged.connect(self.togglewebtoonBox) + GUI.qualityBox.stateChanged.connect(self.togglequalityBox) GUI.deviceBox.activated.connect(self.changeDevice) GUI.formatBox.activated.connect(self.changeFormat) MW.progressBarTick.connect(self.updateProgressbar) diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index 71689ab..b23c981 100644 --- a/kindlecomicconverter/KCC_ui.py +++ b/kindlecomicconverter/KCC_ui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'gui\KCC.ui' # -# Created by: PyQt5 UI code generator 5.6 +# Created by: PyQt5 UI code generator 5.8.1 # # WARNING! All changes made in this file will be lost! @@ -81,6 +81,7 @@ class Ui_mainWindow(object): self.rotateBox.setObjectName("rotateBox") self.gridLayout_2.addWidget(self.rotateBox, 0, 1, 1, 1) self.qualityBox = QtWidgets.QCheckBox(self.optionWidget) + self.qualityBox.setTristate(True) self.qualityBox.setObjectName("qualityBox") self.gridLayout_2.addWidget(self.qualityBox, 0, 2, 1, 1) self.webtoonBox = QtWidgets.QCheckBox(self.optionWidget) @@ -241,8 +242,8 @@ class Ui_mainWindow(object): self.mangaBox.setText(_translate("mainWindow", "Manga mode")) self.rotateBox.setToolTip(_translate("mainWindow", "

Unchecked - Split
Double page spreads will be cut into two separate pages.

Indeterminate - Rotate and split
Double page spreads will be displayed twice. First rotated and then split.

Checked - Rotate
Double page spreads will be rotated.

")) self.rotateBox.setText(_translate("mainWindow", "Spread splitter")) - self.qualityBox.setToolTip(_translate("mainWindow", "

Unchecked - 4 panels
Zoom each corner separately.

Checked - 2 panels
Zoom only the top and bottom of the page.

")) - self.qualityBox.setText(_translate("mainWindow", "Panel View 4/2")) + self.qualityBox.setToolTip(_translate("mainWindow", "

Unchecked - 4 panels
Zoom each corner separately.

Indeterminate - 2 panels
Zoom only the top and bottom of the page.

Checked - 4 high quality panels
Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.

")) + self.qualityBox.setText(_translate("mainWindow", "Panel View 4/2/HQ")) self.webtoonBox.setToolTip(_translate("mainWindow", "

Enable special parsing mode for Korean Webtoons.

")) self.webtoonBox.setText(_translate("mainWindow", "Webtoon mode")) self.upscaleBox.setToolTip(_translate("mainWindow", "

Unchecked - Nothing
Images smaller than device resolution will not be resized.

Indeterminate - Stretching
Images smaller than device resolution will be resized. Aspect ratio will be not preserved.

Checked - Upscaling
Images smaller than device resolution will be resized. Aspect ratio will be preserved.

")) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index f2d0fc6..1bffcc4 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -103,6 +103,10 @@ def buildHTML(path, imgfile, imgfilepath): os.makedirs(htmlpath) htmlfile = os.path.join(htmlpath, filename[0] + '.xhtml') imgsize = Image.open(os.path.join(head, "Images", postfix, imgfile)).size + if options.hq: + imgsizeframe = deviceres + else: + imgsizeframe = imgsize f = open(htmlfile, "w", encoding='UTF-8') f.writelines(["\n", "\n", @@ -111,17 +115,20 @@ def buildHTML(path, imgfile, imgfilepath): "", escape(filename[0]), "\n", "\n", "\n" + "content=\"width=" + str(imgsize[0]) + ", height=" + str(imgsize[1]) + "\"/>\n" "\n", "\n", "
\n", - "\n
\n"]) if options.iskindle and options.panelview: if options.autoscale: size = (getPanelViewResolution(imgsize, deviceres)) else: - size = (int(imgsize[0] * 1.5), int(imgsize[1] * 1.5)) + if options.hq: + size = imgsize + else: + size = (int(imgsize[0] * 1.5), int(imgsize[1] * 1.5)) if size[0] - deviceres[0] < deviceres[0] * 0.01: noHorizontalPV = True else: @@ -884,6 +891,8 @@ def makeParser(): " KoA, KoAHD, KoAH2O, KoAO) [Default=KV]") mainOptions.add_option("-m", "--manga-style", action="store_true", dest="righttoleft", default=False, help="Manga style (right-to-left reading and splitting)") + mainOptions.add_option("-q", "--hq", action="store_true", dest="hq", default=False, + help="Try to increase the quality of magnification") mainOptions.add_option("-2", "--two-panel", action="store_true", dest="autoscale", default=False, help="Display two not four panels in Panel View mode") mainOptions.add_option("-w", "--webtoon", action="store_true", dest="webtoon", default=False, @@ -960,16 +969,20 @@ def checkOptions(): # Older Kindle models don't support Panel View. if options.profile == 'K1' or options.profile == 'K2' or options.profile == 'KDX': options.panelview = False + options.hq = False # Webtoon mode mandatory options if options.webtoon: options.panelview = False options.righttoleft = False options.upscale = True + options.hq = False # Disable all Kindle features for other e-readers if options.profile == 'OTHER': options.panelview = False + options.hq = False if 'Ko' in options.profile: options.panelview = False + options.hq = False # CBZ files on Kindle DX/DXG support higher resolution if options.profile == 'KDX' and options.format == 'CBZ': options.customheight = 1200 diff --git a/kindlecomicconverter/image.py b/kindlecomicconverter/image.py index 5035a9e..5538d88 100755 --- a/kindlecomicconverter/image.py +++ b/kindlecomicconverter/image.py @@ -209,6 +209,8 @@ class ComicPage: def __init__(self, options, mode, path, image, color, fill): self.opt = options _, self.size, self.palette, self.gamma = self.opt.profileData + if self.opt.hq: + self.size = (int(self.size[0] * 1.5), int(self.size[1] * 1.5)) self.image = image self.color = color self.fill = fill -- cgit 1.4.1