diff options
author | Paweł Jastrzębski <pawelj@vulturis.eu> | 2014-06-02 19:55:20 +0200 |
---|---|---|
committer | Paweł Jastrzębski <pawelj@vulturis.eu> | 2014-06-02 19:55:20 +0200 |
commit | b323204628f267471082ba60e30f3faf20302094 (patch) | |
tree | e1f19134a7aee093139e51f54fd177c84a60e24b | |
parent | Tweaked merge (diff) | |
download | kcc-b323204628f267471082ba60e30f3faf20302094.tar.gz kcc-b323204628f267471082ba60e30f3faf20302094.tar.bz2 kcc-b323204628f267471082ba60e30f3faf20302094.zip |
Added additional cover processing
-rwxr-xr-x | kcc/comic2ebook.py | 4 | ||||
-rwxr-xr-x | kcc/image.py | 34 |
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') |