about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaweł Jastrzębski <pawelj@vulturis.eu>2014-06-02 19:55:20 +0200
committerPaweł Jastrzębski <pawelj@vulturis.eu>2014-06-02 19:55:20 +0200
commitb323204628f267471082ba60e30f3faf20302094 (patch)
treee1f19134a7aee093139e51f54fd177c84a60e24b
parentTweaked merge (diff)
downloadkcc-b323204628f267471082ba60e30f3faf20302094.tar.gz
kcc-b323204628f267471082ba60e30f3faf20302094.tar.bz2
kcc-b323204628f267471082ba60e30f3faf20302094.zip
Added additional cover processing
-rwxr-xr-xkcc/comic2ebook.py4
-rwxr-xr-xkcc/image.py34
2 files changed, 35 insertions, 3 deletions
diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py
index cc6c522..5415d2c 100755
--- a/kcc/comic2ebook.py
+++ b/kcc/comic2ebook.py
@@ -29,7 +29,7 @@ from re import split, sub
 from stat import S_IWRITE, S_IREAD, S_IEXEC
 from zipfile import ZipFile, ZIP_STORED, ZIP_DEFLATED
 from tempfile import mkdtemp
-from shutil import move, copyfile, copytree, rmtree
+from shutil import move, copytree, rmtree
 from optparse import OptionParser, OptionGroup
 from multiprocessing import Pool
 from xml.dom.minidom import parse
@@ -559,7 +559,7 @@ def genEpubStruct(path, chapterNames):
                 if cover is None:
                     cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'),
                                          'cover' + getImageFileName(filelist[-1][1])[1])
-                    copyfile(os.path.join(filelist[-1][0], filelist[-1][1]), cover)
+                    image.Cover(os.path.join(filelist[-1][0], filelist[-1][1]), cover)
     buildNCX(path, options.title, chapterlist, chapterNames)
     # Ensure we're sorting files alphabetically
     convert = lambda text: int(text) if text.isdigit() else text
diff --git a/kcc/image.py b/kcc/image.py
index c648d68..5b54bbd 100755
--- a/kcc/image.py
+++ b/kcc/image.py
@@ -144,7 +144,7 @@ class ComicPage:
                                      + str(self.border[2]) + "-" + str(self.border[3]))
                 if forcepng:
                     filename += ".png"
-                    self.image.save(filename,  "PNG", optimize=1)
+                    self.image.save(filename, "PNG", optimize=1)
                 else:
                     filename += ".jpg"
                     self.image.save(filename, "JPEG", optimize=1)
@@ -469,3 +469,35 @@ class ComicPage:
             else:
                 # Detection failed
                 return False
+
+
+class Cover:
+    def __init__(self, source, target):
+        self.source = source
+        self.target = target
+        self.image = Image.open(source)
+        self.image = self.image.convert('RGB')
+        self.process()
+        self.save()
+
+    def trim(self):
+        bg = Image.new(self.image.mode, self.image.size, self.image.getpixel((0, 0)))
+        diff = ImageChops.difference(self.image, bg)
+        diff = ImageChops.add(diff, diff, 2.0, -100)
+        bbox = diff.getbbox()
+        if bbox:
+            return self.image.crop(bbox)
+        else:
+            return self.image
+
+    def process(self):
+        self.image = self.trim()
+
+    def save(self):
+        try:
+            if os.path.splitext(self.source)[1].lower() == '.png':
+                self.image.save(self.target, "PNG", optimize=1)
+            else:
+                self.image.save(self.target, "JPEG", optimize=1)
+        except IOError:
+            raise RuntimeError('Failed to save cover')