diff --git a/mangle.pyw b/mangle.pyw
index ad5e380..9bc73ae 100755
--- a/mangle.pyw
+++ b/mangle.pyw
@@ -17,7 +17,9 @@
import sys
+
from PyQt4 import QtGui
+
from mangle.book import MainWindowBook
diff --git a/mangle/about.py b/mangle/about.py
index c2af64b..1cb0b77 100644
--- a/mangle/about.py
+++ b/mangle/about.py
@@ -14,10 +14,10 @@
# along with this program. If not, see .
-import os.path
-import util
from PyQt4 import QtGui, uic
+import util
+
class DialogAbout(QtGui.QDialog):
def __init__(self, parent):
diff --git a/mangle/book.py b/mangle/book.py
index 505d852..38a8ba1 100644
--- a/mangle/book.py
+++ b/mangle/book.py
@@ -14,19 +14,20 @@
# along with this program. If not, see .
-import os
-import os.path
from os.path import basename
-import util
+import os.path
import tempfile
-from PyQt4 import QtGui, QtCore, QtXml, uic
from zipfile import ZipFile
-from image import ImageFlags
-from about import DialogAbout
-from options import DialogOptions
-from convert import DialogConvert
+
+from PyQt4 import QtGui, QtCore, QtXml, uic
from natsort import natsorted
+from about import DialogAbout
+from convert import DialogConvert
+from image import ImageFlags
+from options import DialogOptions
+import util
+
class Book(object):
DefaultDevice = 'Kindle Paperwhite'
@@ -250,7 +251,7 @@ class MainWindowBook(QtGui.QMainWindow):
QtGui.QMessageBox.warning(self, 'Mangle', 'This book has no images to export')
return
- if not self.book.titleSet: # if self.book.title is None:
+ if not self.book.titleSet: # if self.book.title is None:
dialog = DialogOptions(self, self.book)
if dialog.exec_() == QtGui.QDialog.Rejected:
return
@@ -378,7 +379,7 @@ class MainWindowBook(QtGui.QMainWindow):
filenames = []
for directory in directories:
- for root, subdirs, subfiles in os.walk(unicode(directory)):
+ for root, _, subfiles in os.walk(unicode(directory)):
for filename in subfiles:
path = os.path.join(root, filename)
if self.isImageFile(path):
@@ -402,17 +403,16 @@ class MainWindowBook(QtGui.QMainWindow):
for f in cbzFile.namelist():
if f.endswith('/'):
try:
- os.makedirs(path+f)
+ os.makedirs(path + f)
except:
- pass #the dir exists so we are going to extract the images only.
+ pass # the dir exists so we are going to extract the images only.
else:
cbzFile.extract(f, path)
- #Add the directories
- if os.path.isdir(unicode(path)):
+ if os.path.isdir(unicode(path)): # Add the directories
directories.append(path)
- #Add the files
- self.addImageDirs(directories)
-
+
+ self.addImageDirs(directories) # Add the files
+
def isImageFile(self, filename):
imageExts = ['.jpeg', '.jpg', '.gif', '.png']
diff --git a/mangle/convert.py b/mangle/convert.py
index 173a4ce..ca09613 100644
--- a/mangle/convert.py
+++ b/mangle/convert.py
@@ -14,10 +14,13 @@
# along with this program. If not, see .
-import os, shutil
+import os
+import shutil
+
from PyQt4 import QtGui, QtCore
-import image
+
import cbz
+import image
import pdfimage
@@ -39,8 +42,8 @@ class DialogConvert(QtGui.QProgressDialog):
self.pdf = None
if "PDF" in self.book.outputFormat:
- self.pdf = pdfimage.PDFImage(self.bookPath, str(self.book.title), str(self.book.device))
-
+ self.pdf = pdfimage.PDFImage(self.bookPath, str(self.book.title), str(self.book.device))
+
def showEvent(self, event):
@@ -56,9 +59,9 @@ class DialogConvert(QtGui.QProgressDialog):
# Close the archive if we created a CBZ file
if self.archive is not None:
self.archive.close()
- #Close and generate the PDF File
+ # Close and generate the PDF File
if self.pdf is not None:
- self.pdf.close()
+ self.pdf.close()
# Remove image directory if the user didn't wish for images
if 'Image' not in self.book.outputFormat:
@@ -108,7 +111,7 @@ class DialogConvert(QtGui.QProgressDialog):
if self.archive is not None:
self.archive.addFile(target)
if self.pdf is not None:
- self.pdf.addImage(target)
+ self.pdf.addImage(target)
except RuntimeError, error:
result = QtGui.QMessageBox.critical(
self,
diff --git a/mangle/image.py b/mangle/image.py
index a5a3c68..50447f1 100644
--- a/mangle/image.py
+++ b/mangle/image.py
@@ -14,6 +14,8 @@
# along with this program. If not, see .
+import os
+
from PIL import Image, ImageDraw
@@ -23,6 +25,8 @@ class ImageFlags:
Frame = 1 << 2
Quantize = 1 << 3
Stretch = 1 << 4
+ Split = 1 << 5
+ SplitRight = 1 << 6
class KindleData:
@@ -79,6 +83,18 @@ class KindleData:
'Kindle DXG': ((824, 1200), Palette15a),
'Kindle Paperwhite': ((758, 1024), Palette15b)
}
+
+
+def splitLeft(image):
+ widthImg, heightImg = image.size
+
+ return image.crop((0, 0, widthImg / 2, heightImg))
+
+
+def splitRight(image):
+ widthImg, heightImg = image.size
+
+ return image.crop((widthImg / 2, 0, widthImg, heightImg))
def quantizeImage(image, palette):
@@ -93,8 +109,8 @@ def quantizeImage(image, palette):
def stretchImage(image, size):
- widthDev, heightDev = size
- return image.resize((widthDev, heightDev), Image.ANTIALIAS)
+ widthDev, heightDev = size
+ return image.resize((widthDev, heightDev), Image.ANTIALIAS)
def resizeImage(image, size):
widthDev, heightDev = size
@@ -175,15 +191,24 @@ def convertImage(source, target, device, flags):
raise RuntimeError('Cannot read image file %s' % source)
image = formatImage(image)
if flags & ImageFlags.Orient:
- image = orientImage(image, size)
+ image = orientImage(image, size)
+ if flags & ImageFlags.SplitRight:
+ image = splitRight(image)
+ elif flags & ImageFlags.Split:
+ image = splitLeft(image)
+ # Recurse for right page
+ fileName, fileExtension = os.path.splitext(target)
+ newTarget = fileName + "r" + fileExtension
+ print(newTarget)
+ convertImage(source, newTarget, device, flags | ImageFlags.SplitRight)
if flags & ImageFlags.Resize:
- image = resizeImage(image, size)
+ image = resizeImage(image, size)
if flags & ImageFlags.Stretch:
- image = stretchImage(image, size)
+ image = stretchImage(image, size)
if flags & ImageFlags.Frame:
- image = frameImage(image, tuple(palette[:3]), tuple(palette[-3:]), size)
+ image = frameImage(image, tuple(palette[:3]), tuple(palette[-3:]), size)
if flags & ImageFlags.Quantize:
- image = quantizeImage(image, palette)
+ image = quantizeImage(image, palette)
try:
image.save(target)
diff --git a/mangle/options.py b/mangle/options.py
index cf4b021..eb79f7f 100644
--- a/mangle/options.py
+++ b/mangle/options.py
@@ -14,10 +14,10 @@
# along with this program. If not, see .
-import os.path
-import util
-from PyQt4 import QtGui, QtCore, uic
+from PyQt4 import QtGui, uic
+
from image import ImageFlags
+import util
class DialogOptions(QtGui.QDialog):
@@ -59,11 +59,13 @@ class DialogOptions(QtGui.QDialog):
if self.checkboxResize.isChecked():
imageFlags |= ImageFlags.Resize
if self.checkboxStretch.isChecked():
- imageFlags |= ImageFlags.Stretch
+ imageFlags |= ImageFlags.Stretch
if self.checkboxQuantize.isChecked():
imageFlags |= ImageFlags.Quantize
if self.checkboxFrame.isChecked():
- imageFlags |= ImageFlags.Frame
+ imageFlags |= ImageFlags.Frame
+ if self.checkboxSplit.isChecked():
+ imageFlags |= ImageFlags.Split
modified = (
self.book.title != title or
diff --git a/mangle/pdfimage.py b/mangle/pdfimage.py
index c7be86d..908be05 100644
--- a/mangle/pdfimage.py
+++ b/mangle/pdfimage.py
@@ -17,9 +17,10 @@
import os.path
from reportlab.pdfgen import canvas
-from reportlab.lib.pagesizes import letter
+
from image import KindleData
+
class PDFImage(object):
def __init__(self, path, title, device):
outputDirectory = os.path.dirname(path)
@@ -28,7 +29,7 @@ class PDFImage(object):
self.currentDevice = device
self.bookTitle = title
self.pageSize = KindleData.Profiles[self.currentDevice][0]
- #pagesize could be letter or A4 for standarization but we need to control some image sizes
+ # pagesize could be letter or A4 for standarization but we need to control some image sizes
self.canvas = canvas.Canvas(outputPath, pagesize=self.pageSize)
self.canvas.setAuthor("Mangle")
self.canvas.setTitle(self.bookTitle)
diff --git a/mangle/ui/options.ui b/mangle/ui/options.ui
index b6015d5..bd0b71d 100644
--- a/mangle/ui/options.ui
+++ b/mangle/ui/options.ui
@@ -158,6 +158,13 @@
Draw frame around images
+
+ -
+
+
+ Split left and right pages
+
+
-
diff --git a/mangle/util.py b/mangle/util.py
index e23c7f4..3609578 100644
--- a/mangle/util.py
+++ b/mangle/util.py
@@ -15,7 +15,6 @@
import os.path
-import re
import sys
diff --git a/setup.py b/setup.py
index b2e9463..7d42ed4 100644
--- a/setup.py
+++ b/setup.py
@@ -16,16 +16,15 @@
# along with this program. If not, see .
-import sys
from distutils.core import setup
-import py2exe
+import sys
sys.argv.append('py2exe')
setup(
- name = 'Mangle',
- windows = [{'script': 'mangle.pyw'}],
- data_files = [('', ['LICENSE']),
+ name='Mangle',
+ windows=[{'script': 'mangle.pyw'}],
+ data_files=[('', ['LICENSE']),
('mangle/ui', ['mangle/ui/book.ui',
'mangle/ui/about.ui',
'mangle/ui/options.ui']),
@@ -39,11 +38,11 @@ setup(
'mangle/img/save_file.png',
'mangle/img/shift_down.png',
'mangle/img/shift_up.png'])],
- options = {'py2exe': {
+ options={'py2exe': {
'bundle_files': 1,
'includes': ['sip'],
'packages': ['reportlab.pdfbase'],
'dll_excludes': ['w9xpopen.exe']
}},
- zipfile = None
+ zipfile=None
)