diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 0c75493..e1941be 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -588,9 +588,9 @@ def imgFileProcessing(work): for i in workImg.payload: img = image.ComicPage(opt, *i) if opt.cropping == 2 and not opt.webtoon: - img.cropPageNumber(opt.croppingp) + img.cropPageNumber(opt.croppingp, opt.croppingm) if opt.cropping > 0 and not opt.webtoon: - img.cropMargin(opt.croppingp) + img.cropMargin(opt.croppingp, opt.croppingm) img.autocontrastImage() img.resizeImage() if opt.forcepng and not opt.forcecolor: @@ -982,6 +982,8 @@ 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("--cm", "--croppingminimum", type="float", dest="croppingm", default="0.0", + help="Set cropping minimum area ratio [Default=0.0]") 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, diff --git a/kindlecomicconverter/image.py b/kindlecomicconverter/image.py index 8e553e9..b0bdd3e 100755 --- a/kindlecomicconverter/image.py +++ b/kindlecomicconverter/image.py @@ -350,7 +350,13 @@ class ComicPage: ) return bbox - def cropPageNumber(self, power): + def maybeCrop(self, box, minimum): + box_area = (box[2] - box[0]) * (box[3] - box[1]) + image_area = self.image.size[0] * self.image.size[1] + if (box_area / image_area) >= minimum: + self.image = self.image.crop(box) + + def cropPageNumber(self, power, minimum): if self.fill != 'white': tmptmg = self.image.convert(mode='L') else: @@ -359,16 +365,18 @@ class ComicPage: tmptmg = tmptmg.filter(ImageFilter.MinFilter(size=3)) tmptmg = tmptmg.filter(ImageFilter.GaussianBlur(radius=5)) tmptmg = tmptmg.point(lambda x: (x >= 16 * power) and x) - self.image = self.image.crop(tmptmg.getbbox()) if tmptmg.getbbox() else self.image + if tmptmg.getbbox(): + self.maybeCrop(tmptmg.getbbox(), minimum) - def cropMargin(self, power): + def cropMargin(self, power, minimum): if self.fill != 'white': tmptmg = self.image.convert(mode='L') else: tmptmg = ImageOps.invert(self.image.convert(mode='L')) tmptmg = tmptmg.filter(ImageFilter.GaussianBlur(radius=3)) tmptmg = tmptmg.point(lambda x: (x >= 16 * power) and x) - self.image = self.image.crop(self.getBoundingBox(tmptmg)) if tmptmg.getbbox() else self.image + if tmptmg.getbbox(): + self.maybeCrop(self.getBoundingBox(tmptmg), minimum) class Cover: